11

これを変換します:

{"items":[{"id":"BLE89-A0-123-384","weight":"100","quantity":3},
          ...    
          {"id":"BLE10-A0-123-321","weight":"100","quantity":4}],
"country":"JUS",
"region":"A",
...
"timeout":"FILLER"}

これに:

{"BLE89-A0-123-384": "3", "BLE10-A0-123-321": "4"}つまり... {id: 数量}

必要なことをほぼ実行する答えを見つけました: Searching for an Object inside the JSON。しかし、その答えは最初のレベル (1 つの json オブジェクト) にすぎないため、役に立ちません。私の問題は第 2 レベル (json オブジェクト内の json オブジェクト) にあります。前もって感謝します!

4

3 に答える 3

34

JSONオブジェクトをJSONオブジェクトと考えていない場合に役立ちます。JSON.parseを介してJSON文字列を実行すると、それはネイティブJavaScriptオブジェクトになります。

JavaScriptでは、オブジェクトにアクセスする方法が2つあります。

ドット表記

ドット表記は次のようになります

myObject.name

ドットが見えますか?これを使用して、任意のオブジェクトプロパティにアクセスできます(有効なドット表記名があれば、実際にはjavascriptの別のオブジェクトである可能性があります)。、、、スペース文字などの-文字は使用できません。.

ブラケット表記(別の名前の場合もあります)

myObject["variableName"]

ドット表記と同様ですが、スペース文字などの他の文字を使用でき-ます。まったく同じことを行います。

ネストされたプロパティにアクセスできるため、これらの表記を使用すると便利です。

myObj.foo.bar.baz()

それでは、JSONオブジェクトにアクセスしましょう...

{"items":[{"id":"BLE89-A0-123-384","weight":"100","quantity":3,"stock":0},
{"id":"BLE10-A0-123-321","weight":"100","quantity":4,"stock":0}],

自分でJSON形式をブラッシュアップすることもできますが、この例では、いくつかの手がかりがあります...

{オブジェクトの開始を意味します。(JSON文字列全体がオブジェクトそのものであることに注意してください。)

}オブジェクトの終わりを意味します。

"variable"(引用符付き!JSONでは重要ですが、javascriptオブジェクトにアクセス/宣言する場合は重要ではありません)オブジェクトにプロパティを割り当てます。

:JSONオブジェクトとJavaScriptオブジェクトの両方の代入演算子です。の右側にあるもの:は、左側のプロパティに割り当てている値です。

,オブジェクト内で新しいプロパティを開始していることを意味します。

[]おそらく、内部に,コンマが含まれているとは配列を意味することをご存知でしょう。

文字列を実行するJSON.parse(string)と、次のようなオブジェクトが得られます...

var myResponse = JSON.parse(response);

これで、ネイティブJavaScriptオブジェクトとして使用できます。探しているのは、「アイテム」内のネストされたプロパティです。

var items = myResponse.items; //alternatively you could just use myResponse.items

itemsはオブジェクトの配列であるため、既存のオブジェクトを新しいオブジェクトに変換するには、オブジェクトを反復処理する必要があります。

var i;
var result = {} ; //declare a new object.
for (i = 0; i < items.length; i++) {
    var objectInResponse = items[i]; //get current object
    var id = objectInResponse.id; //extract the id.
    var quantity = objectInResponse.quantity;
    result[id] = quantity; //use bracket notation to assign "BLE89-A0-123-384"
    //instead of id.  Bracket notation allows you to use the value
    // of a variable for the property name.

結果は次のようなオブジェクトになります。

{
    "BLE89-A0-123-384" : 3, //additional properties designated by comma
    "BLE10-A0-123-321" : 4 // The last key/value in an object literal CANNOT
    // have a comma after it!
}

角かっこ表記を使用してプロパティにアクセスできます。

var BLE89 = result["BLE10-A0-123-321"]; //use quotes, otherwise JavaScript will try to look up the value of a variable.

于 2012-04-28T22:55:50.320 に答える
2

あなたは試すことができます:

var obj = {
    "items":[
        {"id":"BLE89-A0-123-384","weight":"100","quantity":3},
        {"id":"BLE10-A0-123-321","weight":"100","quantity":4}
    ],
    "country":"JUS",
    "region":"A",
    "timeout":"FILLER"
};

var quantities = {};
obj.items.forEach(function (item) {
    quantities[item.id] = item.quantity;
});

quantitiesはオブジェクトになります{"BLE89-A0-123-384":3,"BLE10-A0-123-321":4}forEachJavaScript の配列オブジェクトのネイティブ メソッドで、要素を反復処理できます。そのコードを関数の中に入れたいと思うかもしれません:

function getQuantities(obj) {
    var quantities = {};
    obj.items.forEach(function (item) {
        quantities[item.id] = item.quantity;
    });
    return quantities;
}
于 2012-04-28T23:04:37.473 に答える
0

次のことを行う必要があります。


var newJSON = {};
for (var i = 0; i < oldJSON.items.length; i++) {
  newJSON[oldJSON.items[i].id] = oldJSON.items[i].quantity;
}
于 2012-04-28T22:52:12.583 に答える