Par*_*hah 65 javascript parsing json
可能重复:
我有一个嵌套的数据结构/我如何访问特定的值?
如何才能在Javascript中获取每个对象的名称和值?
Cor*_*bin 131
有两种方法可以访问对象的属性:
var obj = {a: 'foo', b: 'bar'};
obj.a //foo
obj['b'] //bar
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要动态执行此操作:
var key = 'b';
obj[key] //bar
Run Code Online (Sandbox Code Playgroud)
如果您还没有将它作为对象,则需要进行转换.
对于更复杂的示例,假设您有一组表示用户的对象:
var users = [{name: 'Corbin', age: 20, favoriteFoods: ['ice cream', 'pizza']},
{name: 'John', age: 25, favoriteFoods: ['ice cream', 'skittle']}];
Run Code Online (Sandbox Code Playgroud)
要访问第二个用户的age属性,您可以使用users[1].age.要访问第一个用户的第二个"favoriteFood",您可以使用users[0].favoriteFoods[2].
另一个例子: obj[2].key[3]["some key"]
这将访问名为2的数组的第3个元素.然后,它将访问该数组中的"key",转到该数组的第三个元素,然后访问属性名称some key.
正如Amadan所指出的那样,讨论如何循环不同的结构也许值得.
要遍历数组,可以使用简单的for循环:
var arr = ['a', 'b', 'c'],
i;
for (i = 0; i < arr.length; ++i) {
console.log(arr[i]);
}
Run Code Online (Sandbox Code Playgroud)
循环一个对象有点复杂.如果您绝对肯定该对象是普通对象,则可以使用普通for (x in obj) { }循环,但在hasOwnProperty检查中添加它会更安全.在无法验证对象没有继承属性的情况下,这是必需的.(这也是未来的代码证明.)
var user = {name: 'Corbin', age: 20, location: 'USA'},
key;
for (key in user) {
if (user.hasOwnProperty(key)) {
console.log(key + " = " + user[key]);
}
}
Run Code Online (Sandbox Code Playgroud)
(请注意,我假设您正在使用的任何JS实现console.log.如果没有,您可以使用alert或某种DOM操作.)
Sac*_*rma 16
在github尝试Douglas Crockford的JSON Parser .然后,您可以简单地从String变量中创建一个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"];
Run Code Online (Sandbox Code Playgroud)
好的,这是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])
}
}
}
}?
Run Code Online (Sandbox Code Playgroud)
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}]
}}
Run Code Online (Sandbox Code Playgroud)
我的解决方案
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];
Run Code Online (Sandbox Code Playgroud)
批准的代码
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);
Run Code Online (Sandbox Code Playgroud)
结果
*使用[]方法或点表示法时,应使用区分配置

| 归档时间: |
|
| 查看次数: |
347298 次 |
| 最近记录: |