아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
탈퇴한 사용자
탈퇴한 사용자21.04.13

json 파싱 코드 에러 질문입니다.

https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/annotations/heading/json?heading=Acid%20Value

위에 보기 불편 하시면

http://jsoneditoronline.org/#left=local.hacowe&right=local.vexezi

여기에 붙여 넣어주시면 됩니다.

여기에서 CID 값을 얻고 싶은데

=========================================================================

import requests

import json


host = 'https://pubchem.ncbi.nlm.nih.gov/rest/pug_view'

path = '/annotations/heading/json?heading=Acid%20Value'

url = host + path
a = requests.get(url)b = a.json()

for data in b["Annotations"]["Annotation"]:

print(data["LinkedRecords"][0]["CID"][0])

============================================================================

위 코드를 돌리면

KeyError: 'LinkedRecords'

에러가 뜹니다.

어떻게 해야할까요?

55글자 더 채워주세요.
답변의 개수2개의 답변이 있어요!
  • 데이터를 확인해보면 일부 데이터는 LinkedRecords 가 없기 때문에 발생합니다.

    예) 제일 앞의 데이터

    { "SourceName":"EU Food Improvement Agents", "SourceID":"E 322 LECITHINS", "Name":"LECITHINS", "Description":"Commission Regulation (EU) No 231/2012 of 9 March 2012 laying down specifications for food additives listed in Annexes II and III to Regulation (EC) No 1333/2008 of the European Parliament and of the Council Text with EEA relevance", "URL":"https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=CELEX%3A32012R0231", "Data":[ { "TOCHeading":{ "type":"Compound", "#TOCHeading":"Acid Value" }, "Value":{ "StringWithMarkup":[ { "String":"Lecithins: not more than 35 mg of potassium hydroxide per gram; Hydrolysed lecithins: not more than 45 mg of potassium hydroxide per gram" } ] } } ] }

    따라서 없는 경우에는 출력을 건너띄도록 수정하시면 됩니다.

    dictionary 안에 해당하는 Key 가 있는지 확인 하는 방법에는 if 조건문이나 try-except를 사용할 수 있습니다.

    또한 LinkedRecords 아래에 바로 CID가 존재하기에
    data["LinkedRecords"][0]["CID"] 가 아닌 data["LinkedRecords"]["CID"] 으로 CID를 접근해야 합니다.

    "LinkedRecords":{ "CID":[ 443314 ] }

    아래는 if "key" in dictionary: 를 사용한 예시입니다.

    또한 CID의 경우 리스트라서 [0]을 제거했습니다.
    만약 첫 CID 만 필요한 경우에는 원래대로 [0]을 넣으면 됩니다.

    import requests import json host = 'https://pubchem.ncbi.nlm.nih.gov/rest/pug_view' path = '/annotations/heading/json?heading=Acid%20Value' url = host + path a = requests.get(url) b = a.json() # print(b["Annotations"]["Annotation"]) for data in b["Annotations"]["Annotation"]: if "LinkedRecords" in data: print(data["LinkedRecords"]["CID"])


  • 안녕하세요

    샘플 소스입니다. 참고하세요~

    import requests host = 'https://pubchem.ncbi.nlm.nih.gov/rest/pug_view' path = '/annotations/heading/json?heading=Acid%20Value' url = host + path response = requests.get(url) json = response.json(); for data in json['Annotations']['Annotation']: linkedRecords = data.get('LinkedRecords') if linkedRecords == None: continue print('CID :', linkedRecords['CID'][0])