【问题标题】:Javascript iteration of JSON Object into an Array for infinte JSON object valuesJSON对象的Javascript迭代到无限JSON对象值的数组
【发布时间】:2020-07-20 09:41:31
【问题描述】:

我有一个 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天。 :-(

【问题讨论】:

  • 您能告诉我们您尝试过什么,什么无效吗?
  • “无限”是指“任意”吗?

标签: javascript json for-loop


【解决方案1】:

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

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 对象进行更多优化

【讨论】:

  • 嗨,非常感谢。我得到了解决方案。非常感谢一个。你节省了我的时间。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 2011-09-12
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多