如何处理有时在对象数组中返回的Json数据,有时只返回对象?

时间:2010-11-02 15:58:23

标签: javascript jquery

我从服务器中获取了一些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
}

它有效,但我有很多代码完全相同,除了访问对象属性的方式,每当我改变一个我需要记住改变另一个或我会有问题。 客户端是他们处理这个问题的更好方法吗?

3 个答案:

答案 0 :(得分:8)

如果不将products转换为数组怎么样?

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

... all logic here

答案 1 :(得分:3)

...创建一个函数?

 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`;
 });

答案 2 :(得分:0)

让它永远是一个数组。

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