Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理Json数据,这些数据有时返回一个对象数组,有时返回一个对象?_Javascript_Jquery - Fatal编程技术网

Javascript 如何处理Json数据,这些数据有时返回一个对象数组,有时返回一个对象?

Javascript 如何处理Json数据,这些数据有时返回一个对象数组,有时返回一个对象?,javascript,jquery,Javascript,Jquery,我正在从服务器获取一些Json,通过这些Json在dom中动态构建一个表。 当存在多个对象时,数据将作为对象数组返回 像这样: { "ProductList": { "Products": [{ "ProductID": "1", "Name": "ProdName"}, { "ProductID": "2", "Name": "ProdName2"}]

我正在从服务器获取一些Json,通过这些Json在dom中动态构建一个表。 当存在多个对象时,数据将作为对象数组返回 像这样:

{
    "ProductList": {
        "Products": [{
            "ProductID": "1",
            "Name": "ProdName"},
        {
            "ProductID": "2",
            "Name": "ProdName2"}]
    }
}
{
    "ProductList": {
        "Products": {
            "ProductID": "3",
            "Name": "ProdName3"
        }
    }
}
if ($.isArray(productDetails.ProductList.Products) === true) {
    for (i = 0; i < productDetails.ProductList.Products.length; i++) {
      //Create the dom elements by accessing the object properties with [i]
      //ie. productDetails.ProductList.Products[i].ProductsID
    }
}
else {
   //Create the dom elements by accessing the object properties w/o [i]
   //ie. productDetails.ProductList.Products.ProductsID
}
但是,当只有一个对象时,它仅作为对象而不是像这样的数组返回:

{
    "ProductList": {
        "Products": [{
            "ProductID": "1",
            "Name": "ProdName"},
        {
            "ProductID": "2",
            "Name": "ProdName2"}]
    }
}
{
    "ProductList": {
        "Products": {
            "ProductID": "3",
            "Name": "ProdName3"
        }
    }
}
if ($.isArray(productDetails.ProductList.Products) === true) {
    for (i = 0; i < productDetails.ProductList.Products.length; i++) {
      //Create the dom elements by accessing the object properties with [i]
      //ie. productDetails.ProductList.Products[i].ProductsID
    }
}
else {
   //Create the dom elements by accessing the object properties w/o [i]
   //ie. productDetails.ProductList.Products.ProductsID
}
所以我一直在做的是检查它是否是这样一个数组:

{
    "ProductList": {
        "Products": [{
            "ProductID": "1",
            "Name": "ProdName"},
        {
            "ProductID": "2",
            "Name": "ProdName2"}]
    }
}
{
    "ProductList": {
        "Products": {
            "ProductID": "3",
            "Name": "ProdName3"
        }
    }
}
if ($.isArray(productDetails.ProductList.Products) === true) {
    for (i = 0; i < productDetails.ProductList.Products.length; i++) {
      //Create the dom elements by accessing the object properties with [i]
      //ie. productDetails.ProductList.Products[i].ProductsID
    }
}
else {
   //Create the dom elements by accessing the object properties w/o [i]
   //ie. productDetails.ProductList.Products.ProductsID
}
if($.isArray(productDetails.ProductList.Products)==true){
对于(i=0;i
它可以工作,但我有很多代码完全相同,除了访问对象属性的方式,每当我更改一个时,我需要记住更改另一个,否则我会遇到问题。
在客户端,他们是否有更好的方法来处理此问题?

如果没有,如何将
产品
转换为阵列

var products = productDetails.ProductList.Products;
if (!$.isArray(products)) {
    products = new Array(products);
}

... all logic here

。。。创建一个函数

 function maybeArray(obj, func) {
    if ($.isArray(obj))
      $.each(obj, func);
    else
      func(0, obj);
 }

 ...

 maybeArray(productDetails.ProductList.Products, function(i, product) {
    create DOM element for `product`;
 });

使其始终为数组

if(!$.isArray(productDetails.ProductList.Products)){
  productDetails.ProductList.Products = [productDetails.ProductList.Products];
}

无论子对象是1个还是多个对象,都以数组的形式返回子对象不是更好吗?这就是我用来处理JSON输出刚从XML转换而来的Web服务的方式。