0

以下の形式の JSON データがあります。「Non Veg」で specialDeal が true になっている店舗に対応する店舗名を取得する必要があります。(注: ストアの 1 つだけが 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 では、次の 2 つの方法でオブジェクト プロパティにアクセスできます。

  1. 名前のドット表記とリテラル (例: obj.foo.

  2. ブラケット表記と名前の文字列obj["foo"](例: . また、文字列は単なる文字列リテラルである必要はなく、任意の式の結果にすることができます。

これとは別に、これは疑わしいです:

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

trueJavaScript で物事をと比較すること==は、通常は良い考えではありません。が, , , , orspecialDealではない値を持っているかどうかだけを知りたい場合(および、JSON はそれをサポートしていません)、単に比較を削除します:0false""undefinednullundefined

if (amountObj['specialDeal']) {

またはもちろん

if (amountObj.specialDeal) {

また、JSON ではstringspecialDealとして指定されることに注意してください。特売品ではないものの文字列が常に空白であれば、それで問題ありません。空白の文字列は偽物だからです。ただし、文字列に が含まれている可能性がある場合、文字は ではないため、注意が必要です。その対処方法をアドバイスするために、他の可能な値の例を確認する必要がありますが、それが常にfalse であり、他の文字列が true である場合は、上記で問題ありません。"false" "false"false""

JSONをに変更すると、上記の mod を使用したこのコードは正常に動作specialDealますソースtrue

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 に答える