我需要将JSON转换为Array。我尝试使用map
。它适用于简单的JSON,但不适用于二维JSON
<script>
var json = `{ "foo": 1, "bar": 2, "baz": 3 }`;
var obj = JSON.parse(json);
var values = Object.keys(obj).map(function (key) { return obj[key]; });
alert("This Works " + JSON.stringify(values));
var json2 = `[{ "foo": 1, "bar": 2, "baz": 3 },{ "foo": 1, "bar": 2, "baz": 3 },{ "foo": 1, "bar": 2, "baz": 3 }]`;
var obj2 = JSON.parse(json2);
var values2 = Object.keys(obj2).map(function (key) { return obj2[key]; });
alert("This Doesn't Work " + JSON.stringify(values2));
</script>
这是一个测试用例。我究竟做错了什么?
答案 0 :(得分:1)
首先必须使用map函数处理外部数组,然后必须使用Object.values,最后必须使用flat才能拥有一维数组
,
答案 1 :(得分:0)
第二个对象是一个数组,因此您需要按原样使用它。
一种替代方法是使用函数reduce
获取对象并使用函数concat
连接值。
建议使用函数Object.values
来避免映射过程。
var json = `{ "foo": 1, "bar": 2, "baz": 3 }`;
var obj = JSON.parse(json);
var values = Object.keys(obj).map(function(key) {
return obj[key];
});
console.log("This Works " + JSON.stringify(values));
var json2 = `[{ "foo": 1, "bar": 2, "baz": 3 },{ "foo": 1, "bar": 2, "baz": 3 },{ "foo": 1, "bar": 2, "baz": 3 }]`,
obj2 = JSON.parse(json2),
values2 = obj2.reduce((a, c) => [...a, Object.values(c)], []);
console.log("This now Works " + JSON.stringify(values2));