仅打印json文件的特定部分

时间:2019-03-05 19:14:44

标签: python json api

我想知道在尝试在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"
      }

3 个答案:

答案 0 :(得分:0)

data["Departure"]是一个列表,您像在字典中一样对其进行索引。

答案 1 :(得分:0)

您将字典示例写得令人困惑。这是我的外观:

d =     {
  "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"
      }]}}]}

这是打印depTime

的方法
print(d["Departure"][0]["Stops"]["Stop"][0]["depTime"])

您错过的重要部分是d["Departure"][0],因为d["Departure"]list

答案 2 :(得分:0)

正如凯尔(Kyle)在上一个回答中所说,{'cat': 'meow', 'dog': 'hairy', 'rabbit': 'carrot'} 是一个列表,但是您试图将其用作字典。有两种可能的解决方案。

  1. data["Departure"]等更改为data["Departure"]["Stops"]["Stop"]等。

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

data["Departure"][0]["Stops"]["Stop"]