简体   繁体   English

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

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

say that I receive this JSON array from an API call.假设我从 API 调用中收到了这个 JSON 数组。

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

How do I transform it into this:我如何将其转换为:

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

The number of fields and the values are of course variable.字段的数量和值当然是可变的。

With JSON5.parse() I can transform it into this:使用 JSON5.parse() 我可以将其转换为:

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

But this is still not what I need.但这仍然不是我需要的。

How can I achieve the transformation I need, without hacky workarounds that might change the values inside?我怎样才能实现我需要的转换,而没有可能改变内部值的变通办法?

Thank you谢谢

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});
}

This inspects every element of the initial array on its own and extracts the label and the value.这会自行检查初始数组的每个元素并提取 label 和值。 These then get pushed into the returnArray in the correct format.然后将它们以正确的格式推送到 returnArray 中。

I managed to make it work with this: (Thanks @Alexander)我设法使它与此一起工作:(感谢@Alexander)

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

However, it is not very clean.但是,它不是很干净。

you can try this你可以试试这个

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));

you can try something like this:你可以尝试这样的事情:

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

Output: Output:

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

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

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