0

我目前有一个现有的 JSON,我想将其更改/重新格式化为新的 JSON,以便能够在外部服务中使用。格式有点复杂,但我无法更改,所以我必须编辑现有的 JSON。匹配我想要的输出。

现有的 JSON:

{
    "specifiers": [{
        "value": "test",
        "type": "text",
        "label": "Brand ID"
    }, {
        "value": "test",
        "type": "text",
        "label": "Program ID"
    }]
}

期望的输出:


{
    "specifiers": {
        "Brand ID": {
            "text": {
                "value": "test",
                "type": "text"
            }
        },

        "Program ID": {
            "text": {
                "value": "test",
                "type": "text"
            }
        }
    }
}

我已经尝试使用循环遍历现有的 JSON,但我真的不知道如何格式化我的循环以使用值作为键?我猜我可能必须使用 Object.keys 或 Object.values,但我不确定如何获取特定键的特定值。

示例格式:

        "[label]": {
            "[type]": {
                "value": [value],
                "type": [type]
            }
        }
4

3 回答 3

3

function tranform({specifiers}) {
  return { specifiers: specifiers.reduce((obj, {label, type, value}) => ({...obj, [label]: { [type]: { type, value } } }), {}) }
}

const json = {
    "specifiers": [{
        "value": "test",
        "type": "text",
        "label": "Brand ID"
    }, {
        "value": "test",
        "type": "text",
        "label": "Program ID"
    }]
}

console.log(tranform(json))

于 2019-03-13T19:45:27.930 回答
0

使用reduce非常简单:

const formattedSpecifiers = existingJSON.specifiers.reduce((newSpecifiers, specifier) => {
  newSpecifiers[specifier.label] = {
      [specifier.type]: {
        type: specifier.type,
        value: specifier.value,
      },
    };
  };

  return newSpecifiers;
}, {});

const newJSON = { specifiers: formattedSpecifiers };
于 2019-03-13T19:40:25.523 回答
0

你可以使用#Array.reduce。下面的片段。

let input = {
  "specifiers": [{
    "value": "test",
    "type": "text",
    "label": "Brand ID"
  }, {
    "value": "test",
    "type": "text",
    "label": "Program ID"
  }]
}
const res = input.specifiers.reduce((res, obj) => {
  const {
    label,
    type,
    value
  } = obj
  res[label] = {};
  res[label][type] = {
    value,
    type
  };
  return res;
}, {});
console.log(res);

于 2019-03-13T19:55:10.967 回答