我有以下问题,我想从json获取所有polyline.points数据:
"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);
}
});
有人能帮助我吗?谢谢!
答案 0 :(得分:0)
嘿你的'value'变量包含(key,value)对。所以使用值['折线']来获取数据。
答案 1 :(得分:0)
legs
是一个对象的属性,但你还没有说过,如果该级别只有一个对象,或者它是否是数组的一部分,但是如果它不是很难修改。
您可以使用reduce将legs.steps
数组转换为一个大数组,然后将其映射以提取polyline.points
。
这样,如果legs
数组或steps
数组中有多个元素,它就可以正常工作。请注意,如果polyline
未定义,它将抛出异常,因此您需要添加某种形式的错误检查。
var data = data.legs.reduce((prev, cur) => {
prev.push(...cur.steps);
return prev;
}, [])
.map(x => x.polyline.points);
编辑:根据OP评论修改:
这个Fiddle只会盲目地期望收到一个对象并从中获取第一个routes
对象。
第二个Fiddle会将routes
和steps
压缩成一个大的坐标数组。我知道你说你不需要,但这似乎是一个有趣的挑战:)
仅供参考,因为它符合ES6标准,因此IE就是其中之一。