【问题标题】:Change the key name to be the key value structure of a nested JSON将键名更改为嵌套 JSON 的键值结构
【发布时间】:2020-06-02 18:07:00
【问题描述】:

我正在尝试清理我从 API 请求的 JSON,因为 DB 插入了一个键名、键值结构并弄乱了所有内容,不幸的是我无法访问后面,所以我必须清理JSON 在前面,问题之一是数据并不总是相同的结构,所以,我需要一个递归解决方案来迭代所有嵌套的 JSON,真正的 JSON 有更多的嵌套子级,但出于演示目的,我只显示JSON 的一部分。

这是结构的一个例子,但有时结构不一样,有时我没有得到人口或人口的值之一。

[
  { "Name": "code", "Value": "18187" },
  { "Name": "date", "Value": "2020-05-10" },
  {
    "Name": "countries",
    "Value": [
      [
        { "Name": "id", "Value": "1" },
        { "Name": "name", "Value": "Canada" },
        {
          "Name": "population",
          "Value": [
            [
              { "Name": "id", "Value": "1" },
              { "Name": "male", "Value": "1000" }
            ],
            [
              { "Name": "id", "Value": "2" },
              { "Name": "female", "Value": "1000" }
            ]
          ]
        }
      ],
      [
        { "Name": "id", "Value": "2" },
        { "Name": "name", "Value": "Italy" },
        {
          "Name": "population",
          "Value": [
            [
              { "Name": "id", "Value": "1" },
              { "Name": "male", "Value": "1000" }
            ],
            [
              { "Name": "id", "Value": "2" },
              { "Name": "female", "Value": "1000" }
            ]
          ]
        }
      ]
    ]
  }
]

我正在尝试清理所有的键名、键值,以获得如下内容:

[
  { "code": "18187" },
  { "date": "2020-05-10" },
  {
    "countries": [
      [
        { "id": "1" },
        { "name": "Canada" },
        {
          "population": [
            { "male": "1000" },
            { "female": "1000" }
          ]
        }
      ],
      [
        { "id": "2" },
        { "name": "Italy" },
        {
          "population": [
            { "male": "1000" },
            { "female": "1000" }
          ]
        }
      ]
    ]
  }
]

【问题讨论】:

  • Sooo,到目前为止,您尝试了什么,什么不起作用? :)

标签: javascript json


【解决方案1】:

您可以使用使用map 方法的递归函数。

const data = [{"Name":"code","Value":"18187"},{"Name":"date","Value":"2020-05-10"},{"Name":"countries","Value":[[{"Name":"id","Value":"1"},{"Name":"name","Value":"Canada"},{"Name":"population","Value":[[{"Name":"id","Value":"1"},{"Name":"male","Value":"1000"}],[{"Name":"id","Value":"2"},{"Name":"female","Value":"1000"}]]}],[{"Name":"id","Value":"2"},{"Name":"name","Value":"Italy"},{"Name":"population","Value":[[{"Name":"id","Value":"1"},{"Name":"male","Value":"1000"}],[{"Name":"id","Value":"2"},{"Name":"female","Value":"1000"}]]}]]}]

function modify(data) {
  return data.map(e => {
    if (Array.isArray(e)) return modify(e)
    else {
      const { Name, Value } = e;
      return ({
        [Name]: Array.isArray(Value) ?
          modify(Value) : Value
      })
    }
  })
}

const result = modify(data);
console.log(result)

【讨论】:

  • 感谢@nenad-vracar 的帮助,需要做的是在对象中创建最终数组,但我真的很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 2020-07-06
  • 2020-10-08
  • 1970-01-01
  • 2021-08-18
相关资源
最近更新 更多