2017-01-19 7 views
0

Я стараюсь работать с этим файлом JSON с питоном: JSON fileНе удается получить доступ к ключу в файле JSon

Я хочу, чтобы получить доступ на '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'?

+0

Можете ли вы показать нам, как выглядит ваш json-файл? – Wizix

+1

Я не вижу никаких «lignes» в этом файле JSON – danyamachine

+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) 
+0

Привет @Taras, мой файл был неправильным ^^ Я изменяю ссылку. Вы можете проверить это :) –

+0

* Я хочу получить доступ к ключу 'lignes' с помощью этого кода * – RomanPerekhrest

+0

Я обновил ответ. –

1

Если я понять это правильно, а не попытки/за исключением вы хотите сделать

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

Я пробовал свой код, но он всегда показывает мне «ничего»:/ –

+0

Я обновил ответ, чтобы удалить дополнительную проверку 'if format (i ['fields'] ['lignes']) в данных:'. – Chris

0

Ключ lingnes не существует пример JSON-файла, который вы опубликовали, однако он находится на том же уровне, что и «формат». что-то вроде этого

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

Чтобы проверить, если ключ существует в Словаре, сделайте
if key in dict: ... Таким образом, в вашем случае,
if 'lignes' in i['fields']: ...

В настоящее время, вы проверяете ли значение из i['fields']['lignes'] является ключ из data, что не имеет смысла, а также может вызывать исключение, прежде чем вся строка даже закончит оценку, то есть может произойти ошибка, когда i t оценивает i['fields']['lignes'], потому что вы еще не проверили, является ли 'lignes' ключом i['fields'].

Смежные вопросы