![](/img/trans.png)
[英]How to display a property value based on another property value of a JSON object?
[英]Traverse json and display property value
我正在嘗試輸出以下json的部分:
我如何從beer.name.568.name
輸出值pint
?
{
"beer": {
"name": "Beer or cider",
"sizes": {
"568": {
"name": "Pint",
"size": 0.568,
"id": "pint",
"max": 10,
"icon": "beer_pint"
},
"440": {
"name": "Can",
"size": 0.44,
"id": "can",
"max": 10,
"icon": "beer_can"
},
"330": {
"name": "Bottle",
"size": "0.33",
"id": "bottle",
"max": "10",
"icon": "beer_bottle_330"
},
"275": {
"name": "Small bottle",
"size": 0.275,
"id": "smallBottle",
"max": 10,
"icon": "beer_bottle_275"
}
},
"strength": [4, 4.5, 5, 6, 7, 8, 9]
},
"wine": {
"name": "Wine or champagne",
"sizes": {
"125": {
"name": "Small glass",
"size": 0.125,
"id": "small",
"max": 10,
"icon": "wine_small_glass"
},
"175": {
"name": "Standard glass",
"size": 0.175,
"id": "std",
"max": 10,
"icon": "wine_standard_glass"
},
"250": {
"name": "Large glass",
"size": 0.25,
"id": "large",
"max": 10,
"icon": "wine_large_glass"
},
"1000": {
"name": "Bottle",
"size": 1,
"id": "bottle",
"max": 10,
"icon": "wine_bottle"
}
},
"strength": [9, 10, 10.5, 11, 11.5, 12, 13, 14, 15, 16, 17]
},
"spirits": {
"name": "Spirits or shots",
"sizes": {
"25": {
"name": "Single",
"size": 0.025,
"id": "single",
"max": 10,
"icon": "spirit_single"
},
"35": {
"name": "Large single",
"size": 0.035,
"id": "lgSingle",
"max": 10,
"icon": "spirit_large_single"
},
"50": {
"name": "Double",
"size": 0.05,
"id": "double",
"max": 10,
"icon": "spirit_double"
},
"70": {
"name": "Large double",
"size": 0.07,
"id": "lgDouble",
"max": 10,
"icon": "spirit_large_double"
},
"700": {
"name": "Bottle",
"size": 0.7,
"id": "bottle700",
"max": 3,
"icon": "spirit_bottles"
},
"1000": {
"name": "Bottle",
"size": 1,
"id": "bottle",
"max": 3,
"icon": "spirit_bottles"
}
},
"strength": [37, 40]
},
"alcopop": {
"name": "Alcopop",
"sizes": {
"275": {
"name": "Small bottle",
"size": 0.275,
"id": "small",
"max": 10,
"icon": "alcopops_small_bottle"
},
"330": {
"name": "Standard bottle",
"size": 0.33,
"id": "std",
"max": 10,
"icon": "alcopops_standard_bottle"
},
"750": {
"name": "Large bottle",
"size": 0.75,
"id": "large",
"max": 10,
"icon": "alcopops_large_bottle"
}
},
"strength": [5, 5.5]
}
}
顯然,這種方法可能有很多缺點,因為在某些情況下循環可能會無限循環,但是,如果您知道結構“穩定”,那么當您知道鍵並想要獲取時,就可以在某種動態json模式中模擬搜索屬性值。
var data = { "beer": { "name": "Beer or cider", "sizes": { "568": { "name": "Pint", "size": 0.568, "id": "pint", "max": 10, "icon": "beer_pint" }, "440": { "name": "Can", "size": 0.44, "id": "can", "max": 10, "icon": "beer_can" }, "330": { "name": "Bottle", "size": "0.33", "id": "bottle", "max": "10", "icon": "beer_bottle_330" }, "275": { "name": "Small bottle", "size": 0.275, "id": "smallBottle", "max": 10, "icon": "beer_bottle_275" } }, "strength": [4, 4.5, 5, 6, 7, 8, 9] }, "wine": { "name": "Wine or champagne", "sizes": { "125": { "name": "Small glass", "size": 0.125, "id": "small", "max": 10, "icon": "wine_small_glass" }, "175": { "name": "Standard glass", "size": 0.175, "id": "std", "max": 10, "icon": "wine_standard_glass" }, "250": { "name": "Large glass", "size": 0.25, "id": "large", "max": 10, "icon": "wine_large_glass" }, "1000": { "name": "Bottle", "size": 1, "id": "bottle", "max": 10, "icon": "wine_bottle" } }, "strength": [9, 10, 10.5, 11, 11.5, 12, 13, 14, 15, 16, 17] }, "spirits": { "name": "Spirits or shots", "sizes": { "25": { "name": "Single", "size": 0.025, "id": "single", "max": 10, "icon": "spirit_single" }, "35": { "name": "Large single", "size": 0.035, "id": "lgSingle", "max": 10, "icon": "spirit_large_single" }, "50": { "name": "Double", "size": 0.05, "id": "double", "max": 10, "icon": "spirit_double" }, "70": { "name": "Large double", "size": 0.07, "id": "lgDouble", "max": 10, "icon": "spirit_large_double" }, "700": { "name": "Bottle", "size": 0.7, "id": "bottle700", "max": 3, "icon": "spirit_bottles" }, "1000": { "name": "Bottle", "size": 1, "id": "bottle", "max": 3, "icon": "spirit_bottles" } }, "strength": [37, 40] }, "alcopop": { "name": "Alcopop", "sizes": { "275": { "name": "Small bottle", "size": 0.275, "id": "small", "max": 10, "icon": "alcopops_small_bottle" }, "330": { "name": "Standard bottle", "size": 0.33, "id": "std", "max": 10, "icon": "alcopops_standard_bottle" }, "750": { "name": "Large bottle", "size": 0.75, "id": "large", "max": 10, "icon": "alcopops_large_bottle" } }, "strength": [5, 5.5] } }; function findPropertyValueForKey(prev, key, property, data) { if (typeof data != "object") return; var keys = Object.keys(data); for (var i = 0; i < keys.length; i++) { if (keys[i] == key) { prev.push(data[key][property]); } else { findPropertyValueForKey(prev, key, property, data[keys[i]]); } } }; var results = []; findPropertyValueForKey(results, "568", "name", data); console.log(results);
var beer = { "sizes": { "568": { "name": "Pint" } } } console.log(beer.sizes[568].name); // "Pint" console.log(beer['sizes'][568]['name']); // "Pint"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.