-1

可能重复:
我有一个嵌套数据结构/JSON,如何访问特定值?

我有一个以下格式的 JSON 数据。我需要获取与“Non Veg”中具有 specialDeal 为 true 的商店名称对应的商店名称。(注意:只有一家商店将 specialDeal 设为 true)我将如何检索它。请帮忙。在此先感谢..请帮助我,因为我刚刚学习 Java。

 {"Food":
  {
   "Veg":
    {
        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"", 
        "discntType":"", "Store":"", "StoreType":"", "Fund":"",
        "FundDetails":[
                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},
                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}
        ]
     },
   "Non Veg":
        {
        "chicken":
                [
                {
                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",
                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",
                        "specialDeal":"", "promoStatus":"",
                        "FundDetails":[
                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},
                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}
                        ]
     },
     {
                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",
                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",
                        "specialDeal":"", "promoStatus":"",
                        "FundDetails":[
                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},
                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}
                        ]
     }
    ],
        "fish":
                [
                {
                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",
                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",
                        "specialDeal":"", "promoStatus":"",
                        "FundDetails":[
                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},
                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}
                        ]
                },
                {
                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",
                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",
                        "specialDeal":"", "promoStatus":"",
                        "FundDetails":[
                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},
                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}
                        ]
                }
                ],
        "egg":
                [
                {
                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",
                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",
                        "specialDeal":"", "promoStatus":"",
                        "discntVal":"", "FundVal":"", "FundBal":""
                },
                {
                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",
                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",
                        "specialDeal":"", "promoStatus":"",
                        "discntVal":"", "FundVal":"", "FundBal":""
                }
                         ]
        },
"isMember":"Y",
"orderId":""

}

4

2 回答 2

0

好的,所以 JSON 在某处缺少一些花括号 - 我认为它们在最后。

这是过程:

// s_json is the string form of your json response
var s_json='{"Food":  {   "Veg":    {        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",         "discntType":"", "Store":"", "StoreType":"", "Fund":"",        "FundDetails":[                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}        ]     },   "Non Veg":        {        "chicken":                [                {                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",                        "discntType":"", "Store":"result", "StoreType":"", "Fund":"",                        "specialDeal":"true", "promoStatus":"",                        "FundDetails":[                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}                        ]     },     {                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",                        "specialDeal":"", "promoStatus":"",                        "FundDetails":[                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}                        ]     }    ],        "fish":                [                {                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",                        "specialDeal":"", "promoStatus":"",                        "FundDetails":[                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}                        ]                },                {                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",                        "specialDeal":"", "promoStatus":"",                        "FundDetails":[                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""},                                {"status":"", "discntVal":"", "FundVal":"", "FundBal":""}                        ]                }                ],        "egg":                [                {                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",                        "specialDeal":"", "promoStatus":"",                        "discntVal":"", "FundVal":"", "FundBal":""                },                {                        "amtSpent":"", "shortDesc":"", "longDesc":"", "excTxt":"",                        "discntType":"", "Store":"", "StoreType":"", "Fund":"",                        "specialDeal":"", "promoStatus":"",                        "discntVal":"", "FundVal":"", "FundBal":""                }               ]        },"isMember":"Y","orderId":""}}';
// We use a json parser to turn the string into an object, o_json. In firefox, instead of using jQuery you could use JSON.parse(s_json). Other parsers are available in other frameworks/browsers
var o_json=jQuery.parseJSON(s_json);
// Initialize an empty string for the result
var result=""
// look in the o_json object for the food object property, then grab it's object property with the key "Non Veg". loop through each of the enumerable properties of this object, calling each one o_food
for each (o_food in o_json.Food["Non Veg"]) {
    // Loop through all the elements of the array o_food
    for (var i=0;i<o_food.length;i++) {
        // Does this element of the array have a property, specialDeal, whose value is "true"? If so, check the same element for a property called Store, and use it's value for the value of result
        if (o_food[i].specialDeal=="true") result=o_food[i].Store;
    }
}
// Alert the result
alert(result);

您会注意到我稍微更改了您的 json,以便找到结果。一旦你使用了框架(如 jQuery)或某些浏览器中可用的本机 json 解析器(如 ff),你可以将 json 视为普通对象

于 2012-11-23T07:02:24.400 回答
0

你可以试试这个:

var nonVeg = jsonData.Food['Non Veg']; // jsonData is json data which you have given above
for(var key in nonVeg) {
  for(var i=0; i<nonVeg[key].length; i++) { 
     var storeObj = nonVeg[key][i];
     if(storeObj['specialDeal']== 'true'){ 
        console.log(storeObj['Store']);
     }
  }
}

因为我们只对 JSON 的 Non Veg 部分感兴趣,所以我们可以将它存储到某个变量中,即 var nonVeg = jsonData.Food['Non Veg']; 现在我们可以将 nonVeg 单独称为一个对象。在这个对象中它有几个对象,所以让我们用 for 循环遍历每个对象,并将其存储到一个名为storeObj. 由于 storeObj 有许多键值参数,因此可以storeObj使用 for 循环对每个参数进行迭代。最后让我们检查一下该specialDeal属性的值是否为true? 如果是,那么console.log它的“存储”属性即。storeObj['Store'].

于 2012-11-23T07:05:17.437 回答