如何仅从二维JSON获取值?

时间:2018-10-25 21:26:44

标签: javascript json

我需要将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> 

这是一个测试用例。我究竟做错了什么?

2 个答案:

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