0

我有以下格式的 JSON 数据。我需要获取与“Non Veg”中具有 specialDeal 为 true 的商店名称对应的商店名称。(注意:只有一个商店将 specialDeal 设为 true,还请注意 nonVeg 中的内容不是数组)。我将如何找回它?请帮忙。提前致谢。

{
  "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":""
}

这是我尝试过的代码:

var nonveg = DealsJSON.Non Veg; //where JSON is our json data
for (var key in nonveg) {
    for (var i = 0; i < nonveg[key].length; i++) {
        var amountObj = nonveg[key][i];
        if (amountObj['specialDeal'] == true) {
            console.log(amountObj['Store']);
        }
    }
}
4

1 回答 1

0

代码看起来不错,除了:

var nonveg = DealsJSON.Non Veg;

...这是一个语法错误。属性文字中不能有空格,即使属性名称可以。要使用名称不是有效文字的属性,可以使用方括号表示法:

var nonveg = DealsJSON["Non Veg"];

详细信息:在 JavaScript 中,您可以通过两种方式访问​​对象属性:

  1. 点表示法和名称的文字,例如obj.foo.

  2. 括号表示法和名称的字符串,例如obj["foo"]. 并且字符串不必只是字符串文字,它可以是任何表达式的结果。

另外,这是可疑的:

if (amountObj['specialDeal'] == true) {

将事物true==JavaScript 中的 with 进行比较通常不是一个好主意。如果您只想知道是否specialDeal有一个不是0, false, "", undefined, or的值null(而且它不能是undefined,JSON 不支持),只需删除比较:

if (amountObj['specialDeal']) {

或者当然

if (amountObj.specialDeal) {

另请注意,在您的 JSON 中,specialDealstring形式给出。如果对于非特价商品,字符串始终为空白,那很好,因为空白字符串是错误的。但是如果字符串可能包含,例如,"false"你必须小心,因为字符串 "false"不是false。我们必须查看其他可能值的示例,以便建议您如何处理它,但如果它始终""为 false 而其他字符串为 true,则上述内容很好。

如果我将您的 JSON 更改specialDealthat's true,则带有上面列出的 mod 的这段代码可以正常工作:Live Example | 来源

var nonveg = DealsJSON["Non Veg"];
for (var key in nonveg) {
  for (var i = 0; i < nonveg[key].length; i++) {
    var amountObj = nonveg[key][i];
    if (amountObj.specialDeal) {
      display("Found store: " + amountObj.Store);
    }
  }
}
于 2012-11-24T11:18:01.923 回答