2012-04-28 163 views
7

轉換這樣的:如何提取一個JSON對象,JSON對象內的

{"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。但是這個答案對我沒有幫助,因爲它只是在第一級(一個json對象)。我的問題是在第二級(json對象內的json對象)。提前致謝!

+1

'{「BLE89-A0-123-384」,「3」; 「BLE10-A0-123-321」,「4」}'這甚至不是一個有效的對象,它必須是一個關鍵值對。 – 2012-04-28 22:41:31

+0

對不起,修好了! – mrmo123 2012-04-28 22:43:45

+0

什麼*不*你知道該怎麼辦?你知道如何訪問數組或對象的成員嗎?你知道如何迭代一個數組嗎?你知道如何創建一個對象,併爲其分配新的鍵/值對嗎?很高興知道你需要什麼幫助。 – 2012-04-28 22:56:48

回答

21

它幫助,如果你不認爲JSON對象作爲JSON對象。一旦通過JSON.parse運行JSON字符串,它就是一個本地JavaScript對象。

在JavaScript中,有兩種訪問對象的方式。

點表示法

點符號是這樣

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 format刷了自己,但在你的例子,這裏有幾個線索..

{意味着一個對象的開始。 (請記住,您的整個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.

+0

+1進行徹底解釋。 – 2012-04-28 23:04:54

+0

哇,這是一個比我預期的問題更徹底的答案:D – epidemian 2012-04-28 23:08:33

+0

感謝您的好評! – mrmo123 2012-04-28 23:10:14

0

你需要做到以下幾點:


var newJSON = {}; 
for (var i = 0; i < oldJSON.items.length; i++) { 
    newJSON[oldJSON.items[i].id] = oldJSON.items[i].quantity; 
} 
+0

'.length()'需要是'.length'。長度是屬性而不是函數。 – 2012-04-28 23:01:09

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}forEach是JavaScript中的數組對象的本地方法,可讓您遍歷其元素。你可能想把這段代碼放到一個函數中:

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

謝謝!!!!!! – mrmo123 2012-04-28 23:15:29