代码之家  ›  专栏  ›  技术社区  ›  etoisarobot

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

  •  2
  • etoisarobot  · 技术社区  · 14 年前

    这样地:

    {
        "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 回复  |  直到 14 年前
        1
  •  8
  •   Nikita Rybak    14 年前

    转换一下怎么样 products 如果不是要排列?

    var products = productDetails.ProductList.Products;
    if (!$.isArray(products)) {
        products = new Array(products);
    }
    
    ... all logic here
    
        2
  •  3
  •   kennytm    14 年前

     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`;
     });
    
        3
  •  0
  •   Jerod Venema    14 年前

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