2014-03-24 23 views
0

我一直在開發在那裏我以這種格式接收數據的web應用價值,從一個節點服務器:轉換JSON到數組鍵 - 在JavaScript

"{""elements":[{"10sr2b2":{"total":0,"bad":22,"clients":["fc8e7f","fc8e7e"],"zone":"101900"}}]}" 

的poblem是這個數據是一個數組鍵值稱爲「元素」,其中「10sr2b2」是數組第一個元素的鍵。

所以,當我調用$ .parseJSON()方法,這個返回一個對象是這樣的:

elements: Array[1] 
    0: Object 
    10sr2b2: Object 
     zone: "101900" 
     clients: Array[2] 
     0: "fc8e7f" 
     1: "fc8e7e" 
     length: 2 
     __proto__: Array[0] 
    bad: 22 
    total: 0 

其中「10sr2b2」它應該是關鍵,它是一個對象,我需要得到這個值不知何故。

你能幫我嗎?

+1

你_JSON_的格式'對象{」鍵「:Array [Object {」key「:Object {...}}]}'就像你在解析它時看到的一樣。雖然你可以在_Objects_中找到關鍵字,但它可能更適合你的需要,重新構造服務器提供給你的對象{Object {「key」:Array {Object {「key」:「hash」,「value」:Object {...}}]}',現在你可以使用'o.elements [i] .key;'和'o.elements [i] .value' –

+0

我認爲有一個關鍵啓動與編號 – DDK

回答

1

你可以使用Object.keys獲取對象的鍵。

var keys = Object.keys(data.elements[0]); 
0

您可以更改節點服務器的格式嗎?它需要發送更多的東西一樣:

"{""elements":[{"key": "10sr2b2" "value": {"total":0,"bad":22,"clients":"fc8e7f","fc8e7e"],"zone":"101900"}}]}"

+0

嗨,感謝您的貢獻,不幸的是我不能改變這種格式。 –

+0

,但是能否在解析之前將接收到的數據轉換爲這種格式? – Starscream1984

+0

不是。這是示例數據。我期待着很多數據,並且將接收到的數據轉換爲這種格式是不可能的。 –

0

如果你知道你永遠只對每個項目一個鍵,就可以使用一個for..in循環,立即break S,例如

var i, key, obj = $.parseJSON(/*...*/); 
for (i = 0; i < obj.elements.length; ++i) { // loop over elements 
    for (key in obj.elements[i]) break; // get key 
    // now can access 
    obj.elements[i][key]; // Object 
}