如何获得解析的json的第n级?

时间:2018-11-22 14:33:32

标签: javascript json parsing

我有一个具有三个级别的JSON,并且将其存储为数组,我需要获取第二个级别(从0开始计数),并且每个级别中的10个以下元素。如何在JavaScript上实现它。需要您的帮助。所有回复都会有所帮助。

ps。某些第一级和第二级元素可以为空

[
  {
    "name": "0th level first", //0th level
    "options": [
      {
        "name": "1st level Cafe", // 1st level
        "options": [
          {
            "name": "2nd level Staff", //2nd level
            "options": [
              {
                "name": "Gary", //3rd level
                "age": 18
              },
              {
                "name": "James", //3rd level
                "age": 25
              }
            ]
          }
        ]
      }
    ]
  }
]

3 个答案:

答案 0 :(得分:0)

假设data包含您的json,我们有2位在线用户:

let out = data[0].options[0].options[0];

let outArr = data.flatMap(x=>x.options.flatMap(y=>y.options));

结果

// out = {"name":"2nd level Staff","options":[{"name":"Gary","age":18},{"name":"James","age":25}]}

// outArr = [{"name":"2nd level Staff","options":[{"name":"Gary","age":18},{"name":"James","age":25}]}]

第一个(out)包含一个第二个元素。我们在此处使用树索引(三个零),首先data[0]返回数组数据中的第一个元素,然后options[0]返回选项数组中的第一个元素。

第二个解决方案(outArr)包含所有第二个元素的数组。我们在这里使用JS flatMap

写第二种解决方案启发了我 abdullahkady 在问题下方的评论。

答案 1 :(得分:0)

可能是这个吗? :)

  data.forEach((value, index) => {
    for(stage0 in value){
      if(typeof value[stage0] === 'object'){
        value[stage0].forEach((val, index) => {
          for(stage1 in val){
            if(typeof val[stage1] === 'object'){
              val[stage1].forEach((val2, index) => {
                for(stage2 in val2){
                  console.log(val2[stage2]);
                }
              })
            }
          }
        })
      }
    }
  })

答案 2 :(得分:0)

您可以使用array.forEach,它将仅遍历每个级别。

在第一个循环上有一个属性调用options,它是一个数组,您需要在0级别循环遍历options数组,在第二个循环上再来一个另外的options数组,您需要再次遍历options数组1级。 那么您将达到输出的三级水平。

第三级意味着从零开始,第二级。

我希望这能解决问题。

var data = [
  {
    "name": "0th level first", //0th level
    "options": [
      {
        "name": "1st level Cafe", // 1st level
        "options": [
          {
            "name": "2nd level Staff", //2nd level
            "options": [
              {
                "name": "Gary", //3rd level
                "age": 18
              },
              {
                "name": "James", //3rd level
                "age": 25
              }
            ]
          }
        ]
      }
    ]
  }
]

data.forEach(fl => {
 fl.options.forEach(sl => {
  sl.options.forEach(tl => {
    console.log("second level starting from 0",tl)
  })
 })
})