3

我有一个以下格式的 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

一种方法是为此使用 JSONPath,使用任何 Java 实现,例如这个:json-path

List<Object> objectsHavingSpecialDeal = JsonPath.read(json, "$..*[?(@.specialDeal == 'true')]");
// iterate over that list to get the `Store` field value
for (Object o: objectsHavingSpecialDeal) {
    Map<String, String> fields = (Map<String, String>)o;
    System.out.println("Store: " + fields.get("Store"));
}
于 2012-11-22T13:13:15.090 回答
0

假设javascript:

您的数据略有不一致,关于蔬菜,我建议像这样重组它:

var test = { "Food":
{
    "Veg":
            {
                "vegetables":
                    [
                    {
                        "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": ""
}
}

然后,您可以获取所有具有specialDeal属性的对象,如下所示:

for (key in test.Food) {
    if (test.Food.hasOwnProperty(key)) {
        var f = test.Food[key];
        for (cat in f) {
            if (f.hasOwnProperty(cat)) {
                for (prop in f[cat]) {
                    if (f[cat].hasOwnProperty(prop) && f[cat][prop].specialDeal != undefined) {
                        console.log(f[cat][prop].specialDeal, f[cat][prop], "Category: " + cat + ", Index: " + prop)
                    }
                }
            }
        }
    }
}

它不漂亮,但它有效。

我在这里做的是循环遍历对象。 for (key in test.Food) {}找到 中的所有键test.Food,它们是:

Veg
Non Veg
isMember
orderId

然后,您可以使用 获取子对象test.Food[key],并再次遍历该对象。在循环的后面,我正在测试对象是否具有specialDeal属性。如果是这种情况,我会记录下来。

对象的问题在于,如果您想通过它们搜索具有特定值的对象,则该对象必须具有常规格式。这就是为什么我在"Veg".

于 2012-11-22T13:31:20.550 回答