【问题标题】:nested json response to get data form site in python嵌套json响应以在python中获取数据表单站点
【发布时间】:2020-03-13 05:35:18
【问题描述】:
{
  "updateEpoch": 1584073939851,
  "totalConfirmed": 1743,
  "totalDeaths": 41,
  "stateToCountyToData": {
    "WA": {
      "stateConfirmed": 457,
      "stateDeaths": 31,
      "countyToData": {
        "King": {
          "countyConfirmed": 270,
          "countyDeaths": 27,
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -122.536993,
                  47.403355,
                  0
                ],
                [
                  -122.537595,
                  47.337339,
                  0
                ],
                [
                  -122.510135,
                  47.31962,
                  0
                ],
                [
                  -122.437252,
                  47.333717
                ]
              ]
            ]
          }
        }
      }
    }
  }
}

预期结果 = county=king,countyconfirmed=270,countydeaths=27

代码:

listing_response=json.loads(response.text)
listings=listing_response.get("data")
if listings:
for listing in listings:
    countyconfirmed=listing.get("stateToCountyToData").get("WA").get("countyToData").get("King").get("countyConfirmed")
    print(countyconfirmed)

【问题讨论】:

  • 有什么问题?
  • 我需要废弃county=king,countyconfirmed=270,countydeaths=27 我得到的问题是AttributeError: 'unicode' object has no attribute 'get
  • 您的代码示例包含listing_response.get("data"),这会输出什么?我在您的 JSON 中没有看到“数据”键。
  • 响应中没有键,所以我想知道如何获取响应,
  • 你已经有了? listing_response 是您的回复,您应该会发现它有 stateToCountyToData 键。

标签: python json web-scraping


【解决方案1】:

由于您的程序可能不知道某些字段,例如“King”,因此您需要遍历一些 JSON 并处理所有子元素。像这样的东西会为响应中的每个州和县提取数据的相关部分:

listing_response = json.loads(response.text)
for state, state_content in listing_response["stateToCountyToData"].items():                                                
    for county, county_content in state_content["countyToData"].items():
        print("{}: {}: confirmed= {}; deaths= {}".format(
            state, county, county_content["countyConfirmed"],
            county_content["countyDeaths"]))

【讨论】:

  • AttributeError: 'int' 对象没有属性 'items'
  • 与上面附加的 json 结构相同,具有更多不同的状态,countyconfirmed,countydeaths 我需要循环并获取所有状态,countyconfrmd,countydeaths
  • 那个 JSON 元素肯定有“countyDeaths”字段吗?您可能需要考虑将其设为可选,即如果该字段不存在,则假定为 0,具体取决于这对您的数据是否有意义。可以通过county_content.get("countyDeaths", 0)来实现
  • infection2020.netlify.com/z.json 上面代码中的这个响应我得到 keyerror:countyConfirmed
  • 那么你可以使用county_content.get("countyConfirmed", 0)
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多