我要解析一个看起来像这样的json字符串:
{ "a": [{
"b": [
["c"],
[]
], "d": [
[],
[]
], "e": [
[],
["f"]
], "g": [
[],
["h", "i"]
]
}] }
我使用下面的代码解析它并遍历键和值。然而,除了我期望的键和值,我得到一些数字作为键,我猜是那些没有任何键的索引号。如何修改代码(纯javascript)以便我只得到" a,b,c,d,e,f,g,h,i"作为键和值而已,仅此而已?
var jsonData = JSON.parse("name");
for (var key in jsonData) {
if (jsonData.hasOwnProperty(key)) {
// do stuff
}
}
答案 0 :(得分:1)
这是一个遍历数据结构的递归解决方案。当参数是一个数组时,它将迭代并递归每个元素;当它是一个对象时,它将输出每个键并通过每个值递归;否则,它只会输出参数的字符串表示。
var data = { "a": [{
"b": [
["c"],
[]
], "d": [
[],
[]
], "e": [
[],
["f"]
], "g": [
[],
["h", "i"]
]
}] };
function walk(a) {
if (Array.isArray(a)) {
a.map(walk);
} else if (typeof a === 'object') {
Object.keys(a).forEach(key => {
console.log(key);
walk(a[key]);
});
} else {
console.log(a);
}
}
walk(data);

答案 1 :(得分:0)
根据显示的示例,您可以在json字符串上使用正则表达式:
let data = {
"a": [{
"b": [
["c"],
[]
],
"d": [
[],
[]
],
"e": [
[],
["f"]
],
"g": [
[],
["h", "i"]
]
}]
};
let res = JSON.stringify(data).match(/\w+/g);
console.log(res.join())