我如何解析这个JSON以获得我需要的数据

How do I parse this JSON to get the data I need?

本文关键字:数据 何解析 JSON      更新时间:2023-09-26

我一直在挣扎,需要一些帮助。

这是将返回给我的JSON示例。我把它赋值给一个名为result的变量,这样我就可以在代码中测试它。我不确定如何伪造JSON被返回给我。

https://dl.dropboxusercontent.com/u/10842024/JSON.js

JSON由两个不同的对象Line和Line2组成,每个对象由多个路径(polyline)特征组成。

我试图创建一个Polyline对象,并使用ESRI JavaScript API将每个对象添加到地图中。下面是Polyline对象的文档:

https://developers.arcgis.com/javascript/jsapi/polyline-amd.html polyline2

require(["esri/geometry/Polyline"], function(Polyline) {
  var polylineJson = {
    "paths":[[[-122.68,45.53], [-122.58,45.55],
    [-122.57,45.58],[-122.53,45.6]]],
    "spatialReference":{"wkid":4326}
  };
  var polyline = new Polyline(polylineJson);
});

返回的JSON符合Polyline对象的需要:

"features": [
        {
          "attributes": {
            "OBJECTID": 2368
          },
          "geometry": {
            "paths": [
              [
                [
                  -123.94500566712864,
                  45.27071700030354
                ],
                [
                  -123.9449701393585,
                  45.27069704962526
                ],
                [
                  -123.94494162013,
                  45.27067958572745
                ],
                [
                  -123.94489725722464,
                  45.2706251239781
                ],
                [
                  -123.94489153421517,
                  45.27054128625377
                ]
              ]
            ]
          }
        },

但是我如何循环遍历每个功能并将JSON插入Polyline对象,以便它的格式正确?

我知道我错过了一些东西,因为我不知道该怎么做。

我想应该是这样吧…

for (var i in result.results)
{
    var features = result.results[i].features;
    for (var j in features)
    {
        console.log(features[j].attributes.OBJECTID); // print OBJECTID
        var geometry = features[j].geometry.paths;
        for (var k in geometry)
        {
            console.log(geometry[k]); // print paths, arrays of points
            var points = geometry[k];
            for (var l in points)
                console.log(points[l]); // print points
        }
    }
}

http://jsfiddle.net/e0dxn8ze/2/打开JavaScript控制台查看

这是我刚刚写的一个未经测试的解决方案。

// Get the JSON string
json_string = whaterver_function_gets_you_the_json();
// Parse JSON into JS
polys = JSON.parse(json_string);
// Loop through polys and create Polyline
polys.features.forEach(function(el) {
    new Polyline(el.geometry);
});

编辑:对不起,我没有看到JSON.js链接。这个解决方案应该仍然有效,你只需要调整你要循环的对象属性。例如:result.results[0].features.forEach(function(el){});,或者如果您还需要循环遍历所有结果,则可以嵌套forEachs。