我不是那么喜欢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放入布尔变量中。我该如何实现这种行为?
答案 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);