【问题标题】:Restructuring JSON in JavaScript在 JavaScript 中重构 JSON
【发布时间】:2019-03-25 13:24:28
【问题描述】:

我有这个 JSON,我正在使用 NodeJS 解析它,它需要重组为我在下面添加的第二个 JSON。

在第一个 JSON 中,rows 对象有两个 pages 对象(可以存在任意数量的 pages 对象),它们包含所有相同的键和值,但 valuesdisplay 除外键。

{
  "pages": [
    {
      "label": "SomeLabel",
      "name": "Some",
      "sections": [
        {
          "type": "Repeat",
          "label": "Label 1",
          "name": "Name 1",
          "rows": [
            {
              "pages": [
                {
                  "label": "Label 1",
                  "name": "Name 1",
                  "sections": [
                    {
                      "type": "Flow",
                      "label": "Label 2",
                      "name": "Name 2",
                      "answers": [
                        {
                          "label": "Question Label",
                          "question": "Question",
                          "values": [
                            "Value A"
                          ],
                          "valuesMetadata": [
                            {
                              "display": "Display A",
                              "row": {
                                "columns": []
                              }
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "pages": [
                {
                  "label": "Label 1",
                  "name": "Name 1",
                  "sections": [
                    {
                      "type": "Flow",
                      "label": "Label 2",
                      "name": "Name 2",
                      "answers": [
                        {
                          "label": "Question Label",
                          "question": "Question",
                          "values": [
                            "Value B"
                          ],
                          "valuesMetadata": [
                            {
                              "display": "Display B",
                              "row": {
                                "columns": []
                              }
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ],
          "footer": null
        }
      ]
    }
  ]
}

在第二个 JSON 中,rows 对象有一个 pages 对象,其中 valuesdisplay 键有多个值(非公共值)。

{
  "pages": [
    {
      "label": "SomeLabel",
      "name": "Some",
      "sections": [
        {
          "type": "Repeat",
          "label": "Label 1",
          "name": "Name 1",
          "rows": [
            {
              "pages": [
                {
                  "label": "Label 1",
                  "name": "Name 1",
                  "sections": [
                    {
                      "type": "Flow",
                      "label": "Label 2",
                      "name": "Name 2",
                      "answers": [
                        {
                          "label": "Question Label",
                          "question": "Question",
                          "values": [
                            "Value A",
                            "Value B"
                          ],
                          "valuesMetadata": [
                            {
                              "display": [
                                "Display A",
                                "Display B"
                              ],
                              "row": {
                                "columns": []
                              }
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ],
          "footer": null
        }
      ]
    }
  ]
}

所以,我想知道执行此操作的快速简单的步骤。请告诉我解决这个问题的过程和方法。

谢谢

【问题讨论】:

  • 你可以在小例子中更改它inputoutput 以便他们可以轻松提供帮助
  • 如果您明确告诉我们新旧 json 之间的差异,会更容易阅读/解决。
  • 嘿@Scorpioo590,我用更短的 JSON 和更具描述性的摘要编辑了我的帖子。请帮帮我!
  • @G.aziz 请查看我编辑的问题并帮助我

标签: javascript arrays json object nested


【解决方案1】:

如果我对您的理解正确,您希望将所有页面合并到一个包含所有信息的页面中。

这可以使用Array.reduce 函数来实现。 reduce 接受一个数组并使用一个函数(由您提供)将所有元素组合成一个值,以组合前两个元素,直到只剩下一个(即1 * 2 => new1; new1 * 3 => new2,其中* 代表您的函数)。

你的问题应该是这样的:

rows[0].pages = rows[0].pages.reduce((currentElement, currentState) => {
    if (!currentState) { // first iteration return first element but make sure display is an array
        currentElement.sections[0].answers[0].valuesMetadata[0].display =
            [currentElement.sections[0].answers[0].valuesMetadata[0].display];
        return currentElement;
    }

    // add values of current element to arrays in current state
    currentState.sections[0].answers[0].values
        .concat(currentElement.sections[0].answers[0].values);
    currentState.sections[0].answers[0].valuesMetadata[0].display
        .concat(currentElement.sections[0].answers[0].valuesMetadata[0].display);
    return currentState;
});

currentElement是当前归约的数组对象,currentState是归约的中间结果。

PS:

这个对象看起来你有太多不需要它们的数组。给定的代码 sn-p 仅适用于每个数组中的第一个元素(因此是 [0]s。如果每个数组中确实有多个值,则必须相应地迭代所有这些值。

【讨论】:

  • 你能给我一个循环的例子吗?这就是我坚持的部分。
猜你喜欢
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多