2017-04-18 1 views
1

우리의 모니터링 도구에서 현재 상태를 가져 와서 MSSQL DB에서 업데이트하는 스크립트를 작성하려고합니다. API를 호출하면 json 형식으로 큰 응답을 얻습니다.Python에서 API 응답의 json 데이터를 구문 분석하는 방법은 무엇입니까?

{ 
    "hoststatuslist": { 
    "recordcount": "1084", 
    "hoststatus": [ 
     { 
     "@attributes": { 
      "id": "XXXX" 
     }, 
     "host_id": "XXX", 
     "name": "XXXXX", 
     "display_name": "XXXXXXX", 
     "address": "XXXXXX", 
     "alias": "XXXXXX", 
     "status_text": "XXXXXXXXXXXXXXXXXXXXXXX", 
     etc. 
     }, 
     { 
     "@attributes": { 
      "id": "XXXX" 
     }, 
     "host_id": "XXX", 
     "name": "XXXXX", 
     "display_name": "XXXXXXX", 
     "address": "XXXXXX", 
     "alias": "XXXXXX", 
     "status_text": "XXXXXXXXXXXXXXXXXXXXXXX", 
     etc. 
     }, 
     etc. 
    ] 
    } 
} 

자세히 알 수 있듯이 속성이있는 1000 개 이상의 호스트 객체가 있습니다. 내가 MSSQL을 추가/업데이트 할 수 있도록 응답을 구문 분석하고 싶습니다. 각 호스트에 대해 host_id, name 및 status_text를 구문 분석하려고합니다.

나는이 Python - Parsing JSON Data Set과 같은 작업을 시도했지만 응답 객체에 읽기 또는 디코딩 속성이 없다는 오류가 계속 발생합니다.

여기에 내 현재 코드 :

import requests 
import json 

response = requests.get('url with API Key') 
decoded_response = response.read().decode("UTF-8") 
data = json.loads(decoded_response) 
jsonData = data["hoststatus"] 

for host in jsonData: 
    Name = host.get("name") 
    StatusText = host.get("status_text") 

사람이 내가 문을 열어주는 말들 다른 언어 또는 도구를 사용하여이 작업을 수행 할 수있는 제안이 있다면. 약 20 개의 API를 호출하고 모든 상태/기타 정보를 DB에 저장하여 한 위치에 모두 넣어야합니다.

도움이 되셨습니까?

답변

2

다닐는-kondratiev 말했다, 당신은 response.json()을 사용할 수 있습니다 그리고 당신은/디코딩을 인코딩 할 필요가 없습니다. 이 방법이 효과가 있습니까? 내가 정확히 아니면 제가 게시물을 오해하면 자신을 설명하지 않은 경우

import requests 

response = requests.get('url with keys') 

json_data = response.json() if response and response.status_code == 200 else None 

if json_data and 'hoststatuslist' in json_data: 
    if 'hoststatus' in json_data['hoststatuslist']: 
     for hoststatus in json_data['hoststatuslist']['hoststatus']: 
      host_name = hoststatus.get('name') 
      status_text = hoststatus.get('status_text') 
0

시도해보십시오. @처럼 Requests docs

requests.get('https://api.github.com/user', auth=('user', 'pass')) 
>>>r.status_code 
200 
>>> r.encoding 
'utf-8' 
>>> r.json() 
{json} 
+0

는 잘 모르겠지만,이 게시물은 나에게 JSON 데이터를 제공하는 간단하다. json 데이터에서 호스트 이름/상태를 추출해야하는 데이터가 이미 있습니다. 참고로 r.encoding을 시도 할 때 200 개의 상태 코드가있는 경우에도 응답을받지 못합니다. –

관련 문제