Javascript从循环中的JSON获取值
我有以下问题,我想从json获取所有polyline.points数据:Javascript从循环中的JSON获取值,javascript,json,node.js,Javascript,Json,Node.js,我有以下问题,我想从json获取所有polyline.points数据: "legs" : [ { "distance" : { "text" : "115 km", "value" : 115373 }, "duration" : { "text" : "1 hour 14 mins", "value"
"legs" : [
{
"distance" : {
"text" : "115 km",
"value" : 115373
},
"duration" : {
"text" : "1 hour 14 mins",
"value" : 4433
},
"duration_in_traffic" : {
"text" : "1 hour 10 mins",
"value" : 4205
},
"end_address" : "Ermelo, Netherlands",
"end_location" : {
"lat" : 52.2986269,
"lng" : 5.629653999999999
},
"start_address" : "Zwijndrecht, Netherlands",
"start_location" : {
"lat" : 51.8108387,
"lng" : 4.6268639
},
"steps" : [
{
"distance" : {
"text" : "45 m",
"value" : 45
},
"duration" : {
"text" : "1 min",
"value" : 9
},
"end_location" : {
"lat" : 51.81113269999999,
"lng" : 4.627318
},
"html_instructions" : "Head \u003cb\u003enortheast\u003c/b\u003e on \u003cb\u003eKorenbloemstraat\u003c/b\u003e toward \u003cb\u003eLeeuwenbekstraat\u003c/b\u003e",
"polyline" : {
"points" : "whf{H{tf[y@{A"
},
在此json中有多个polyline.points键。
我有以下代码,但不起作用:
//console.log(body.routes[0].legs[0].steps[0].polyline.points);
var keys = [];
for(var i = 0;i<body.routes[0].legs[0].steps.length;i++)
{
Object.keys(body.routes[0].legs[0].steps[i]).forEach(function(value){
if(value == 'polyline') {
Object.keys(value).forEach(function(value){
console.log(value);
}
});
//console.log(body.routes[0]。legs[0]。steps[0]。polyline.points);
var键=[];
对于(var i=0;i嘿,你的'value'变量包含(key,value)对。所以使用value['polyline']来获取你的数据。legs
是一个对象的属性,但是你没有说在这个级别上是否只有一个对象,或者如果它是数组的一部分,但是如果它是数组的一部分,就不应该太难修改
您可以使用reduce将支腿.步数
数组转换为一个大数组,然后映射到该数组以提取多段线.点
这样,如果legs
数组或steps
数组中有多个元素,它将正常工作。请注意,如果polyline
未定义,它将引发异常,因此需要添加一些表单的错误检查
var data = data.legs.reduce((prev, cur) => {
prev.push(...cur.steps);
return prev;
}, [])
.map(x => x.polyline.points);
编辑:根据OPs注释进行修改:
这只会盲目地期望接收一个对象并从中获取第一个路由
对象
这一秒将把路线
和步骤
展平为一个大的坐标数组。我知道你说过你不需要,但这似乎是一个有趣的挑战:)
仅供参考,它符合ES6,所以IE是最好的选择。您可以在上迭代(body.routes[0].legs[0].steps[i]){console.log(key)}
您的预期输出是什么?我希望所有“points”的值都用逗号分隔。在本例中,有1条多段线:whf{H{tf[y@{ACan无法在我的javascript中实现此功能…这是完整的json输出:@MichaelSmits在路由
数组中可能有多个对象吗?如果有,您是否也需要提取嵌套在这些数组中的点
?这是我在第一段中的意思。应该不会太难,如果您这样做,我会更新我的答案。无论哪种方式,请e definehow
它不起作用。不,routes数组中不会有多个对象。对不起,我是javascript新手!非常感谢您的帮助!当我使用该变量时,我得到以下响应:{decode:[Function],encode:[Function],fromGeoJSON:[Function],toGeoJSON:[Function]}