首页 > 解决方案 > 在 JS 中将 JSON 处理成新格式

问题描述

我目前使用此代码将我的 json 重新格式化为我想要的格式:

  let input = {
      "Apples": {
        "Apples_pos1": 501.82,
        "Apples_pos2": 502.61,
        "Apples_pos3": 502.61,
        "Apples": 502.16,
      }
    };

    let output = Object.keys(input).reduce((acc, outerKey) => {
      for (let [key, value] of Object.entries(input[outerKey])) {
        acc.push([outerKey, value, key.split('_')[1] || key]);
      }
      return acc;
    }, []);

    console.log(output);
[
   [
      "Apples",
      501.82,
      "pos1"
   ],
   [
      "Apples",
      502.61,
      "pos2"
   ],
   [
      "Apples",
      502.61,
      "pos3"
   ],
   [
      "Apples",
      502.16,
      "Apples"
   ]
]

如果我的输入看起来像这样:

let second_input = {
  "Apples": {
    "11-26-19": {
      "Apples_pos1": 501.82,
      "Apples_pos2": 502.61,
      "Apples_pos3": 502.61,
      "Apples": 502.16,
    }
  }
};

这是我想要的输出:

[
   [
      "Apples",
      501.82,
      "pos1",
      "11-26-19"
   ],
   [
      "Apples",
      502.61,
      "pos2",
      "11-26-19"
   ],
   [
      "Apples",
      502.61,
      "pos3",
      "11-26-19"
   ],
   [
      "Apples",
      502.16,
      "Apples",
      "11-26-19"
   ]
]

我怎样才能编辑我的旧代码以产生所需的输出?

谢谢。

标签: javascriptjson

解决方案


我尝试完成这项任务,只是稍微修改了脚本:

  let input = {
     "Apples": {
        "11-26-19": {
          "Apples_pos1": 501.82,
          "Apples_pos2": 502.61,
          "Apples_pos3": 502.61,
          "Apples": 502.16,
        }
      }
    };

    let output = Object.keys(input).reduce((acc, outerKey) => {
       Object.entries(input[outerKey]).forEach(([date, item]) => {
          for (let [key, value] of Object.entries(item)) {
            acc.push([outerKey, value, key.split('_')[1] || key, date]);
          }
       });
      return acc;
    }, []);

    console.log(output);

输出:

[
  [
    "Apples",
    501.82,
    "pos1",
    "11-26-19"
  ],
  [
    "Apples",
    502.61,
    "pos2",
    "11-26-19"
  ],
  [
    "Apples",
    502.61,
    "pos3",
    "11-26-19"
  ],
  [
    "Apples",
    502.16,
    "Apples",
    "11-26-19"
  ]
]

推荐阅读