无法访问json文件中的密钥

时间:2017-01-19 18:17:11

标签: python json

我尝试使用python处理这个JSON文件: JSON file

我想使用以下代码访问'lignes'密钥:

import json

with open('arrets-reseau-irigo.json') as data_file:
    data = json.load(data_file)

    for i in data:
        print("datasetid is {0}".format(i['datasetid']))
        print("nom arret is {0}".format(i['fields']['nom_arret']))
        print("coordonnées is {0}".format(i['fields']['geo_point_2d']))
        try :
            if format(i['fields']['lignes']) in data :
                print("Fields : is {0}".format(i['fields']['lignes']))
            else :
                print('nothing')
        except:
            print("EXCEPTION")

结果是:

datasetid is arrets-reseau-irigo
nom arret is GIRARD
coordonnées is [47.4909169756, -0.581150255698]
nothing
datasetid is arrets-reseau-irigo
nom arret is HOTEL DE VILLE TRAM B/C
coordonnées is [47.4716862858, -0.546754596835]
EXCEPTION

您是否有示例代码来解决我的问题并仅在'ligne'密钥存在时显示该值?

4 个答案:

答案 0 :(得分:2)

使用您提供的文件示例。

[
  {
    "datasetid": "arrets-reseau-irigo",
    "fields": {
      "accessib": "O",
      "date_maj": "Décembre 2016",
      "geo_point_2d": [
        47.4682358304,
        -0.550894481011
      ],
      "lignes": "L_1,L_1D,L_1S,L_2,L_2D,L_2S,L_3,L_3D,L_3S,L_4,L_6,L_10",
      "nom_arret": "FOCH - SAINT AUBIN",
      "source": "KEOLIS Réseau IRIGO"
    },
    "geometry": {
      "coordinates": [
        -0.550894481011,
        47.4682358304
      ],
      "type": "Point"
    },
    "record_timestamp": "2017-01-12T17:05:52+01:00",
    "recordid": "65e54c3d5e87a803c3a2199fbde5596e5833be8f"
  },
 ]

<强>更新

import json

with open('file.json') as data_file:
    data = json.load(data_file)

for i in data:
    print("datasetid is {0}".format(i['datasetid']))
    print("nom arret is {0}".format(i['fields']['nom_arret']))
    print("coordonnées is {0}".format(i['fields']['geo_point_2d']))
    description = i['fields'].get('lignes', 'nothing')
    print(description)

答案 1 :(得分:1)

如果我理解这一点,而不是尝试/除了你想做的事情

if 'lignes' in i['fields']:
    print("Fields : is {0}".format(i['fields']['lignes']))
else :
    print('nothing')      

答案 2 :(得分:0)

您发布的示例JSON文件中不存在lingnes密钥,但它与说“格式”处于同一级别。像这样的东西

for count in data:
    if 'fields' in data[count]:
        print(data[count]['fields']['format'])

答案 3 :(得分:0)

要检查dict中是否存在密钥,请执行 if key in dict: ... 所以,在你的情况下,
if 'lignes' in i['fields']: ...

目前,您正在检查i['fields']['lignes']是否是data,这没有任何意义,并且也可能在整行甚至完成评估之前抛出异常,即它在评估i['fields']['lignes']时可能会出错,因为您还没有检查'lignes'是否是关键i['fields']