在JavaScript中迭代Json字符串的键和值

时间:2017-06-22 00:57:42

标签: javascript json

我要解析一个看起来像这样的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
  }
}

2 个答案:

答案 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())