【问题标题】:How to convert one JSON format to another? [closed]如何将一种 JSON 格式转换为另一种? [关闭]
【发布时间】:2021-09-16 13:57:59
【问题描述】:

我想将一个特定的 JSON 转换为另一个 JSON。我一直在尝试使用“减少”功能,但无法获得所需的输出。 我有这个 JSON -

"q_6348":{
      "rowmumaopt_20639":[
         {
            "Q":[
               "Q"
            ]
         },
         {
            "R":[
               "R"
            ]
         }
      ],
      "rowmumaopt_20640":[
         {
            "S":[
               "S"
            ]
         }
      ],
      "rowmumaopt_20641":[
         {
            "R":[
               "R"
            ]
         },
         {
            "Q":[
               "Q"
            ]
         }
      ]
}

我想要这样的东西-

"q_6348":{
      "rowmumaopt_20639":{
            "Q":[
               "Q"
            ],
            "R":[
               "R"
            ]
      },
      "rowmumaopt_20640":{
            "S":[
               "S"
            ]
      },
      "rowmumaopt_20641":{
            "R":[
               "R"
            ],
            "Q":[
               "Q"
            ]
      }
}

我一直坚持这一点。请帮忙...

【问题讨论】:

  • 使用几个沼泽标准循环和 Object.keys,展示你对 reduce 的尝试
  • 你还没有展示你的作品和什么不工作。感觉就像您在要求我们为您编写代码。

标签: javascript arrays json typescript


【解决方案1】:

这是一种方法:

const input = {
  "q_6348": {
    "rowmumaopt_20639": [
      { "Q": [ "Q" ] },
      { "R": [ "R" ] }
    ],
    "rowmumaopt_20640": [
      { "S": [ "S" ] }
    ],
    "rowmumaopt_20641": [
      { "R": [ "R" ] },
      { "Q": [ "Q" ] }
    ]
  }
};

const merge = (obj, ...rest) => rest.length ? {...obj, ...(merge(...rest))} : obj;

for (let i in input) {
  for (let j in input[i]) {
    input[i][j] = merge(...input[i][j]);
  }
}

console.dir(input, { depth: null });

【讨论】:

  • 这一行 (merge(...rest)) 给出错误。 "展开参数必须要么具有元组类型,要么传递给休息参数"
【解决方案2】:

您基本上想将对象数组中的input[n][o] 合并到一个序列化对象中。

由于您在数组对象中有一个可枚举的键,您可以轻松地将它们与Object.assign 合并

例如(根据 Wyck 的回答改进)

const input = {
  "q_6348": {
    "rowmumaopt_20639": [
      { "Q": [ "Q" ] },
      { "R": [ "R" ] }
    ],
    "rowmumaopt_20640": [
      { "S": [ "S" ] }
    ],
    "rowmumaopt_20641": [
      { "R": [ "R" ] },
      { "Q": [ "Q" ] }
    ]
  }
};

for (const i in input) {
  for (const j in input[i]) {
    input[i][j] = Object.assign(...input[i][j]);
  }
}

console.dir(input, { depth: null });

【讨论】:

  • 我在这一行出现错误 (...input[i][j]) 它说“传播参数必须具有元组类型或传递给休息参数。”我正在使用打字稿。
  • @Guccho 你可以尝试在你的 tsconfig.json 中添加compilerOptions.downlevelIteration: true 吗?
  • 优秀的改进!现在,我觉得让它变得比我的答案需要的更复杂有点愚蠢。但我学到了一些东西,我想这就是它的全部意义所在! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多