使用 Python 从 JSON 嵌套列表和字符串数组中提取值

我正在尝试从 JSON 数据集中从马萨诸塞州波士顿的多个社区中提取坐标,但我一直在尝试获取每个城市的第一个坐标对;下面是 Roslindale 坐标的缩小版。


"features": [{

    "type": "Feature",

    "properties": {

      "Name": "Roslindale",

      "Acres": 1605.5682375,

      "SqMiles": 2.51,

    },

    "geometry": {

      "type": "MultiPolygon",

      "coordinates": [

        [

          [

            [

              -71.125927174853857,

              42.272013107957406

            ],

            [

              -71.125927174853857,

              42.272013107957406

            ]

          ]

        ],

        [

          [

            [

              -71.125830766767592,

              42.272212845889705

            ],

            [

              -71.125830766767592,

              42.272212845889705

            ]

          ]

        ],

        [

          [

            [

              -71.125767203228904,

              42.272315958536389

            ],

            [

              -71.125767203228904,

              42.272315958536389

            ]

          ]

        ]

      ]

    }

  },

现在我已经提取了我想要使用的数据


for data in boston_neighborhoods:

    neighborhood_name = data['properties']['Name']

    neighborhood_id = data['properties']['Neighborhood_ID']

    neighborhood_size = data['properties']['SqMiles']

    neighborhood_latlon = data['geometry']['coordinates']

    neighborhood_lat = neighborhood_latlon

    neighborhood_lon = neighborhood_latlon


    neighborhoods = neighborhoods.append({'Neighborhood': neighborhood_name,

                                          'Neighborhood_ID': neighborhood_id,

                                          'SqMiles': neighborhood_size,

                                          'Latitude': neighborhood_lat,

                                          'Longitude': neighborhood_lon}, ignore_index=True)

这将返回多个坐标对,但我只想要第一对,下面是我现在返回的示例输出:


Latitude                   |           Longitude     

--------------------------------------------------------

[[[[-71.12592717485386,    |    [[[[-71.12592717485386, 

42.272013107957406], [...  |    42.272013107957406], [...    


慕婉清6462132
浏览 222回答 1
1回答

qq_遁去的一_1

可能有点矫枉过正,但是JMESPath查询嵌套的 JSON 结构真的很容易。向下遍历文档,您首先需要获取数组 ( [*]) 中的每个元素,然后为每个元素选择项目并将其放入一个对象(Python 字典)中。您将选择下方的社区properties,然后选择Name( properties.Name)。您对类似的嵌套属性执行相同的操作。坐标位于其下geometry.coordinates,是坐标对数组的数组。import jmespathimport pandas as pdquery = """[*].{     Neighborhood: properties.Name,    Neighborhood_ID: properties.Neighborhood_ID,     SqMiles: properties.SqMiles,     Latitude: geometry.coordinates[0][0][0][0],     Longitude: geometry.coordinates[0][0][0][1] }"""compiled = jmespath.compile(query)result = compiled.search(boston_neighborhoods)df = pd.DataFrame.from_records(result)#   Neighborhood Neighborhood_ID  SqMiles   Latitude  Longitude# 0   Roslindale            None     2.51 -71.125927  42.272013
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python