JSON响应parsing在Javascript获取键/值对

可能重复:
我有一个嵌套的数据结构/我如何访问特定的值?

我怎样才能得到每个对象的名称和价值只有在Javascript中?

有两种方法可以访问对象的属性:

var obj = {a: 'foo', b: 'bar'}; obj.a //foo obj['b'] //bar 

或者,如果你需要dynamic地做到这一点:

 var key = 'b'; obj[key] //bar 

如果您还没有将其作为对象,则需要将其转换 。

对于一个更复杂的例子,假设你有一个代表用户的对象数组:

 var users = [{name: 'Corbin', age: 20, favoriteFoods: ['ice cream', 'pizza']}, {name: 'John', age: 25, favoriteFoods: ['ice cream', 'skittle']}]; 

要访问第二个用户的年龄属性,您可以使用users[1].age 。 要访问第一个用户的第二个“favoriteFood”,可以使用users[0].favoriteFoods[2]

又如: obj[2].key[3]["some key"]

这将访问名为2的数组的第三个元素。然后,它将访问该数组中的“键”,转到该数组的第三个元素,然后访问属性名称some key


正如Amadan指出的那样,也许值得讨论如何循环不同的结构。

要遍历数组,可以使用一个简单的for循环:

 var arr = ['a', 'b', 'c'], i; for (i = 0; i < arr.length; ++i) { console.log(arr[i]); } 

循环一个对象有点复杂。 在绝对肯定对象是普通对象的情况下,可以使用for (x in obj) { }循环中的plain,但是添加hasOwnProperty检查会更安全。 在您无法validation对象没有inheritance属性的情况下,这是非常必要的。 (这也是将来的代码。)

 var user = {name: 'Corbin', age: 20, location: 'USA'}, key; for (key in user) { if (user.hasOwnProperty(key)) { console.log(key + " = " + user[key]); } } 

(注意,我假设你使用的任何JS实现都有console.log ,如果没有,你可以使用alert或者某种DOM操作。)

在github上试试Douglas Crockford的JSONparsing器。 然后,您可以简单地从Stringvariables中创build一个JSON对象,如下所示:

 var JSONText = '{"c":{"a":[{"name":"cable - black","value":2},{"name":"case","value":2}]},"o":{"v":[{"name":"over the ear headphones - white/purple","value":1}]},"l":{"e":[{"name":"lens cleaner","value":1}]},"h":{"d":[{"name":"hdmi cable","value":1},{"name":"hdtv essentials (hdtv cable setup)","value":1},{"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]}' var JSONObject = JSON.parse(JSONText); var c = JSONObject["c"]; var o = JSONObject["o"]; 

好的,这里是JS代码:

 var data = JSON.parse('{"c":{"a":{"name":"cable - black","value":2}}}') for (var event in data) { var dataCopy = data[event]; for (data in dataCopy) { var mainData = dataCopy[data]; for (key in mainData) { if (key.match(/name|value/)) { alert('key : ' + key + ':: value : ' + mainData[key]) } } } }​ 

FIDDLE HERE

 var yourobj={ "c":{ "a":[{"name":"cable - black","value":2},{"name":"case","value":2}] }, "o":{ "v":[{"name":"over the ear headphones - white/purple","value":1}] }, "l":{ "e":[{"name":"lens cleaner","value":1}] }, "h":{ "d":[{"name":"hdmi cable","value":1}, {"name":"hdtv essentials (hdtv cable setup)","value":1}, {"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}] }} 
  • 首先,组织起来是个好主意
  • 顶级参考必须是一个更方便的名字,其他的a..v等等
  • 在ov中,不需要数组[],因为它是一个json条目

我的解决scheme

 var obj = []; for(n1 in yourjson) for(n1_1 in yourjson[n]) for(n1_2 in yourjson[n][n1_1]) obj[n1_2[name]] = n1_2[value]; 

批准的代码

 for(n1 in yourobj){ for(n1_1 in yourobj[n1]){ for(n1_2 in yourobj[n1][n1_1]){ for(n1_3 in yourobj[n1][n1_1][n1_2]){ obj[yourobj[n1][n1_1][n1_2].name]=yourobj[n1][n1_1][n1_2].value; } } } } console.log(obj); 

结果

*使用[]方法或点符号时,应使用区分设置

坡口