Javascript 根据返回的JSON对象的数量,将返回不同的JSON格式

Javascript 根据返回的JSON对象的数量,将返回不同的JSON格式,javascript,json,Javascript,Json,我注意到产品API中似乎存在错误。问题如下:- 1.如果返回的JSON包含多个进程(在我的例子中是两个进程),那么JSON结果如下:- {"total":2,"data":[{"id":"leaveApp#2#leaveApplicationProcess","packageName":"Leave App","name":"Leave Application Process","packageId":"leaveApp","label":"Leave Application Process v

我注意到产品API中似乎存在错误。问题如下:- 1.如果返回的JSON包含多个进程(在我的例子中是两个进程),那么JSON结果如下:-

{"total":2,"data":[{"id":"leaveApp#2#leaveApplicationProcess","packageName":"Leave App","name":"Leave Application Process","packageId":"leaveApp","label":"Leave Application Process ver 2","version":"2"},{"id":"leaveApp#2#process1","packageName":"Leave App","name":"Leave Application Process2","packageId":"leaveApp","label":"Leave Application Process2 ver 2","version":"2"}]}
{"total":1,"data":{"id":"crm#1#process1","packageName":"CRM","name":"Proposal Approval Process","packageId":"crm","label":"Proposal Approval Process ver 1","version":"1"}}.
我能够使用以下javaScript显示这两个进程:-

$(document).ready(function () {

    $.ajax({
        type: "GET",
        url: "http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=admin&packageId=leaveApp",

        dataType: "JSONP",

        success: function (result) {
            $.each(result.data, function (key, val) {
                var str = val.name + ' | Version ' + val.version;
                                $('<li/>', { text: str })
                .appendTo($('#products'));

            });        }
    }); });
那么,有没有人能帮助我,让我的javascruipt在不考虑进程数量的情况下工作,或者这是API本身的一个问题

致意

更新

I modify my JavaScript to be as follow:-
$.ajax({
        type: "GET",
       // url: "http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=admin&packageId=" + 'name',
        url: fullurl,
        dataType: "JSONP",
        // contentType: "application/json; charset=utf-8",
        success: function (result) {
            var arr = ( (typeof(result.data) == 'object')        && 
                        (result.data.constructor.name == 'Array') )
                 ? result.data
                 : [result.data];
            $.each(arr, function (key, val) {


                // Format the text to display.
                //   var str = val.packageName + ' | ' + val.packageId;
                var str = val.name + ' | Version ' + val.version;
                // Add a list item for the product.
                $('<li/>', { text: str })
                .appendTo($('#products'));

            });
        }
    });
我将JavaScript修改如下:-
$.ajax({
键入:“获取”,
//url:“http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=admin&packageId=“+‘名称’,
url:fullurl,
数据类型:“JSONP”,
//contentType:“应用程序/json;字符集=utf-8”,
成功:功能(结果){
var arr=((typeof(result.data)='object')&&
(result.data.constructor.name=='Array'))
?结果数据
:[结果.数据];
$。每个(arr、功能(键、值){
//格式化要显示的文本。
//var str=val.packageName+'|'+val.packageId;
var str=val.name+'| Version'+val.Version;
//为产品添加列表项。
$('
  • ',{text:str}) 。附件($(“#产品”); }); } });

  • 但目前如果有一个以上的JSON对象,它将返回“未定义”,而如果只有一个JSON对象,它将正常工作。。。因此,我最初的问题是反之亦然。

    这是因为JSON数据的格式不一致。要修复它,无论是否有多个进程(数组元素),您都可以使
    数据
    作为数组返回

    或者,尝试以下方法:

    var arr = ( (typeof(result.data) == 'object')        && 
                (result.data.constructor.name == 'Array') )
         ? result.data
         : [result.data];
    $.each(arr, function (key, val) {
       // ... rest goes here
    });
    

    <>编辑:<代码>对象 ./P>中的固定键入。谢谢回复,那么我可以认为“JSON数据不是一致格式”是我正在调用的Web服务中的一个问题吗?或者这是我自己的JavaScript的问题?是的,当然-这是web服务的问题!(有时
    data
    是一个JSON数组,有时是一个JSON对象)。这通常是因为他们天真地将XML转换为JSON。请参阅我的更新,只有当存在一个JSON对象时,您的代码才会工作。您最初关于JSON中返回内容的假设是不正确的。您能否将两种类型的响应都完全按照在每种情况下返回的方式发布?谢谢,我已经在我的原始帖子中提供了返回的两个JSON。