2014-03-24 22 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 
}