2017-01-19 2 views
0

내가 파이썬 함께이 JSON 파일과 함께 작업하려고 JSON 파일에서 키에 액세스 할 수 없습니다

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

해당 JSON 파일에 "lignes"가 표시되지 않습니다. – 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

나는 당신의 코드를 시험해 보았지만, 항상 'nothing'이라고 보여 주었다./ –

+0

데이터에서 format (i [ 'fields'] [ 'lignes']) 체크를 제거하기위한 답을 업데이트했다. – Chris

0

lingnes 키에 존재하지 않는 게시 한 JSON 예제 파일이지만 'format'과 같은 수준입니다. 이

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

같은 일이
현재 if 'lignes' in i['fields']: ...

, 당신이 확인되어, 키가 딕셔너리에 존재하는지 확인 귀하의 경우에, 그래서
if key in dict: ... 를 수행i['fields']['lignes']을의 값 여부 data입니다. 이는 의미가 없으며 전체 라인이 평가를 완료하기 전에 예외를 던질 수도 있습니다. 즉, i가 t가 i['fields']['lignes']을 평가하는 이유는 'lignes'i['fields']의 키인지 아직 확인하지 않았기 때문입니다.