首页 > 解决方案 > 仅打印 json 文件的特定部分

问题描述

我想知道在 python 中尝试打印以下代码的名称数据时我做错了什么。

        import urllib.request, json 
    with urllib.request.urlopen("<THIS IS A URL IN THE ORIGINAL SCRIPT>") as url:
        data = json.loads(url.read().decode())
    print (data['Departure']['Product']['name'])
print (data['Departure']['Stops']['Stop'][0]['depTime'])

这是我从中获取数据的 api:

    {
  "Departure" : [ {
    "Product" : {
      "name" : "Länstrafik - Buss 201",
      "num" : "201",
      "catCode" : "7",
      "catOutS" : "BLT",
      "catOutL" : "Länstrafik - Buss",
      "operatorCode" : "254",
      "operator" : "JLT",
      "operatorUrl" : "http://www.jlt.se"
    },
    "Stops" : {
      "Stop" : [ {
        "name" : "Gislaved Lundåkerskolan",
        "id" : "740040260",
        "extId" : "740040260",
        "routeIdx" : 12,
        "lon" : 13.530096,
        "lat" : 57.298178,
        "depTime" : "20:55:00",
        "depDate" : "2019-03-05"
      }

标签: pythonjsonapi

解决方案


正如凯尔在上一个答案中所说,data["Departure"]是一个列表,但您正试图将其用作字典。有 2 种可能的解决方案。

  1. 将 etc.更改data["Departure"]["Stops"]["Stop"]data["Departure"][0]["Stops"]["Stop"]etc.

  2. 更改 JSON 文件以将其转换为字典,这样您就可以保留原始代码。这将使最终的 JSON 片段看起来像这样:

"Departure" : {
  "Product" : {
    "name" : "Länstrafik - Buss 201",
    "num" : "201",
    "catCode" : "7",
    "catOutS" : "BLT",
    "catOutL" : "Länstrafik - Buss",
    "operatorCode" : "254",
    "operator" : "JLT",
    "operatorUrl" : "http://www.jlt.se"
  },
  "Stops" : {
    "name" : "Gislaved Lundåkerskolan",
    "id" : "740040260",
    "extId" : "740040260",
    "routeIdx" : 12,
    "lon" : 13.530096,
    "lat" : 57.298178,
    "depTime" : "20:55:00",
    "depDate" : "2019-03-05"
  }
}

推荐阅读