为了账号安全,请及时绑定邮箱和手机立即绑定

JSON 对象的 Javascript 迭代到无限 JSON 对象值的数组中

JSON 对象的 Javascript 迭代到无限 JSON 对象值的数组中

慕标琳琳 2022-11-27 17:12:13
我有一个 JSON 对象,其中包含无限级别的对象。我想构造一个 JSON 数组,其中它包含一个键中的第一个键和另一个键中的所有关联值。例如,我拥有的 JSON 如下,{    doingnow: {        "action items": { "open": { "child"....}, "In Progress": { "child"....}, "Completed": { "child"....} },        "financial": { "q1": { "jan 2017": { "child"... }, "feb 2017": {....} }, q2: {... }, q3: {... },....}    },    finished: { "discarded": {... } },    .........}但是我期待的实际 JSON 数组[{    key: "doingnow": children: [{        key: "action items", children: [{ key: "open", children: [] }, { key: "In Progress", children: [] }, { key: "Completed", children: [] }],        key: "financial", children: [{ key: q1, children: [{ key: "jan 2017", children: [] }, { key: "feb 2017", children: [] }] },        { key: q2, children: [{ key: "jan 2017", children: [] }, { key: "feb 2017", children: [] }] }]    }],}, { key: "finished", children: [{ ...}] }谁能帮我这个?工作了2天。:-(
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

在这种情况下,递归可能是最佳选择。


const data = '{doingnow: ... your string ... }'

const jsonObject = JSON.parse(data)


const parseObject = (obj) => {

  let returnArray = []


  Object.keys(obj).forEach(key => {

    let childrens = []


    if (typeof obj[key] === 'object' && obj[key] !== null) {

      childrens = parseObject(obj[key])

    }


    returnArray.push({key: key, children: childrens})

  })

  

  return returnArray

}


const result = parseObject(jsonObject)

注意。这对大多数对象都可以正常工作,但您可能需要对巨大的 json 对象进行更多优化


查看完整回答
反对 回复 2022-11-27
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号