繁体   English   中英

Javascript:从键值形式的 JSON 字符串数组到对象数组

[英]Javascript: From JSON array of strings in the form of key:value to array of objects

假设我从 API 调用中收到了这个 JSON 数组。

[
  "{'apple': 'enabled'}",
  "{'banana': 'disabled'}"
] 

我如何将其转换为:

[
  {
    label: 'apple',
    value: 'enabled'
  },
  {
    label: 'banana',
    value: 'disabled'
  }
]

字段的数量和值当然是可变的。

使用 JSON5.parse() 我可以将其转换为:

[
  {
    apple: 'enabled',
  },
  {
    banana: 'disabled'
  }
]

但这仍然不是我需要的。

我怎样才能实现我需要的转换,而没有可能改变内部值的变通办法?

谢谢

const apiArray = [
  "{'apple': 'enabled'}",
  "{'banana': 'disabled'}"
];

const returnArray = [];

for (const element of apiArray) {
  const parsedObj = JSON.parse(element);
  const label = Object.keys(element)[0];
  const value = parsedObj[label];

  returnArray.push({"label": label, "value": value});
}

这会自行检查初始数组的每个元素并提取 label 和值。 然后将它们以正确的格式推送到 returnArray 中。

我设法使它与此一起工作:(感谢@Alexander)

data.map(el=>{
  const parsed = JSON5.parse(el)
  return{
    label: Object.keys(parsed)[0],
    value: Object.values(parsed)[0] 
  }
})

但是,它不是很干净。

你可以试试这个

var newArr = [];
apiArray.forEach((element) => {
  let obj = JSON.parse(element.replaceAll("'", '"'));
  newArr.push({ label: Object.keys(obj)[0], value: Object.values(obj)[0] });
});

console.log(JSON.stringify(newArr));

你可以尝试这样的事情:

myArray.map((data) => {
  const parsedData = JSON.parse(data);
  return {
    label: Object.keys(parsedData).join(),
    value: Object.values(parsedData).join(),
  };
});

Output:

[{
    "label": "apple",
    "value": "enabled"
},
{
    "label": "banana",
    "value": "disabled"
}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM