如何使用JavaScript检查JSON文档中的此对象是简单对象还是数组?

时间:2017-12-06 16:20:03

标签: javascript json

我不是那么喜欢JavaScript而且我有以下问题。要解决这个问题,我只能使用纯旧的JavaScript(不是库或框架)。

我有一个像这样的 JSON 文档:

{
    "Commodity": {
        "CommodityInMarket": {
            "market_info": {
                "market_id": 5,
                "market_name": "Tambacounda Market N2",
                "available_market_count": 1
            },
            "commodity_info": {
                "commodity_details_id": 1,
                "commodity_name_en": "Rice-Asia",
                "commodity_name": "Rice-Asia",
                "image_link": "https://firebasestorage.googleapis.com/v0/b/fao-digital-services-portfolio.appspot.com/o/img%2Ficons%2Fagrimarket%2Fcommodity%2Friz.png?alt=media&token=c35e7648-1793-423b-acd2-52d8a1e58c53",
                "description": "Rice-Asia"
            },
            "price_info": {
                "price_serie_id": 29,
                "today_avg_price": 9.3000,
                "yesterday_avg_price": 9.6000,
                "currency": "XOF",
                "measure_unit": "kilogram"
            }
        }
    }
}

如您所见,此文档包含商品对象。

在某些情况下,它是一个简单的对象(如前面的代码片段所示),在某些其他情况下,它可以是一个数组(这个文档由服务以这种方式返回),所以像这样:

{
    "Commodity": {
        "CommodityInMarket": [{
            .....................................
            .....................................
            .....................................
        },
        {
            .....................................
            .....................................
            .....................................
        }]
    }
}

如何检查我的JSON文档中的商品对象是简单对象还是数组?我需要做这样的事情:

如果是一个简单的对象,则将true放入布尔变量中。我该如何实现这种行为?

3 个答案:

答案 0 :(得分:2)

取自this answer

  

ECMAScript标准中给出的用于查找Object类的方法是使用Object.prototype中的toString方法。

if (Object.prototype.toString.call(obj.Commodity.CommodityInMarket) === '[object Array]') {
  //Loop through obj.Commodity.CommodityInMarket
} else {
  //It's an object, just access directly
}

另一种方法可能是自动将其转换为数组,并始终循环遍历它:

if (!Object.prototype.toString.call(obj.Commodity.CommodityInMarket) === '[object Array]') {
  obj.Commodity.CommodityInMarket = [obj.Commodity.CommodityInMarket];
}
//obj.Commodity.CommodityInMarket should now always be an array

答案 1 :(得分:0)

从ECMAScript 5.1开始,还有Array.isArray()

答案 2 :(得分:0)

我会通过将单个对象转换为包含该对象的数组来创建一致性:

obj.Commodity.CommodityInMarket =
  [].concat(obj.Commodity.CommodityInMarket);