在 Javascript 中进行 JSON 响应解析以获得键/值对

我如何才能得到每个对象的名称和值仅在 Javascript?

483899 次浏览

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

var obj = {a: 'foo', b: 'bar'};


obj.a //foo
obj['b'] //bar

或者,如果需要动态执行:

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

如果您还没有将它作为一个对象,则需要使用 转换它

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

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

要访问第二个用户的 age 属性,可以使用 users[1].age。要访问第一个用户的第二个“ FaviteFood”,需要使用 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]);
}

在对象上循环有点复杂。在绝对肯定对象是普通对象的情况下,可以使用普通的 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]);
}
}

(注意,我假设您正在使用的任何 JS 实现都具有 console.log。如果没有,可以使用 alert或某种 DOM 操作来代替。)

Github道格拉斯·克罗克福特尝试使用 JSON 解析器。 然后,您可以简单地从 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"];
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}]
}}
  • 首先,组织起来是个好主意
  • 顶级参考必须是一个更方便的名称,其他... 等
  • 在 o.v 中,o.i.e 不需要 array [] ,因为它是一个 json 条目

我的解决办法

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);

结果

* 当使用[]方法或点符号时,应使用区分辅料

proove

好的,这是 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])
}
}
}
}​

我是小提琴手