2017-11-16 8 views
0

저는 멍청한 질문이거나 내 용어가 정확하지 않은 경우 개발자가 아니므로 미안합니다. 우리의 CMDB의 API를 호출하기위한 스크립트를 작성하고 있지만, 거기에서 다시 전송되는 데이터를 처리하는 방법을 모르겠습니다. 목록 유형으로 보이지만 키 이름으로는 아무 것도 참조 할 수 없습니다. 내가 쉽게 조작 할 수있는 데이터로 변환 할 수있는 방법이 있습니까?이 목록의 서식 지정/구문 분석에 도움이 필요합니다.

[ 
    { 
     "busObRecId": "9423ad7d617390fdc956ee4302a69d0ccf1a37a4c1", 
     "hasError": false, 
     "links": [ 
      { 
       "url": "http://URL", 
       "name": "Delete Record" 
      } 
     ], 
     "fields": [ 
      { 
       "displayName": "Business Sponsor", 
       "name": "Business Sponsor", 
       "value": "", 
       "html": null, 
       "dirty": false, 
       "fieldId": "9426b6ddf3cb971488517145e39efc5aa7f16fec46" 
      }, 
      { 
       "displayName": "Owned By", 
       "name": "Owned By", 
       "value": "John Doe", 
       "html": null, 
       "dirty": false, 
       "fieldId": "9343f8800b3917f26533954918a6388ae8c863507f" 
      }, 
      { 
       "displayName": "Asset Status", 
       "name": "Asset Status", 
       "value": "Active", 
       "html": null, 
       "dirty": false, 
       "fieldId": "9379053db492ece14816704ef5a9e3e567e217511b" 
      }, 
      { 
       "displayName": "Description", 
       "name": "Description", 
       "value": "Automation Server", 
       "html": null, 
       "dirty": false, 
       "fieldId": "9343f93fc4c8422bcf24e74a9a86035bb7d0248b00" 
      }, 
      { 
       "displayName": "Data Center Location", 
       "name": "Data Center Location", 
       "value": "", 
       "html": null, 
       "dirty": false, 
       "fieldId": "941ba290776d6f51ce35664246927b958330a753b2" 
      } 
     ], 
     "errorMessage": null, 
     "busObPublicId": "9423ad7d617390fdc956ee4302a69d0ccf1a37a4c1", 
     "busObId": "93dada9f640056ce1dc67b4d4bb801f69104894dc8", 
     "errorCode": null 
    } 
] 

type()가 목록으로 객체 bo를 보여주고 len() 내가 얼마나 확실하지 않다, 그래서 그것은 단지 하나 개의 요소가 말한다 : 여기

import requests 
import json 

r=requests.post('API.URL', data={'grant_type': 'password', 'client_id':'#######', 'username': 'user', 'password': 'password'}) 
json_data = json.loads(r.content) 
token = json_data['access_token'] 
data ={ 
    "filters": [ 
    { 
     "fieldId": "937905400191ae67dd03ab4b79968fcbaa264b1a75", 
     "operator": "eq", 
     "value": "hostname" 
    } 
    ], 
    "fields":[ 
    '9426b6ddf3cb971488517145e39efc5aa7f16fec46', 
    '9343f8800b3917f26533954918a6388ae8c863507f', 
    '9379053db492ece14816704ef5a9e3e567e217511b', 
    '9343f93fc4c8422bcf24e74a9a86035bb7d0248b00', 
    '941ba290776d6f51ce35664246927b958330a753b2' 
    ], 
    "association": "Configuration Item", 
    "busObId": "93dada9f640056ce1dc67b4d4bb801f69104894dc8", 
    "includeAllFields": 'false', 
    "pageNumber": 0, 
    "pageSize": 300, 
    "scope": "Global", 
    "scopeOwner": "(None)", 
    "searchName": "APItest" 
} 
payload = json.dumps(data) 
headers = {'Content-Type': 'application/json', 'Accept': 'application/json', 'Authorization':'bearer '+token} 
search=requests.post('http://API.URL', headers=headers, data=payload) 
search_json = json.loads(search.content) 
bo = search_json['businessObjects'] 
print(bo) 

응답입니다 : 여기

내 코드입니다 데이터를 해킹하지 않고 데이터를 꺼내 문자를 제거합니다.

+1

그것은 하나 개의 사전 항목을 포함하는 목록입니다 .... – MooingRawr

+1

'보 [0] [ 'busObRecId'] == '9423ad7d617390fdc956ee4302a69d0ccf1a37a4c1'' – cwallenpoole

답변

0

키 이름으로 아무것도 참조 할 수없는 이유는 출력이 목록이라는 사실입니다. 하나의 사전 요소 만 포함하는 목록입니다.

bo[0] 

당신은 [및] 기호없이 전체 데이터를 얻을 수 있습니다.

93dada9f640056ce1dc67b4d4bb801f69104894dc 

하는의 당신의 첫 번째 요소의 fieldID가 밖으로 인쇄 할 것이다 가정 해 봅시다 :

print(bo["busObId"]) 

는 다음과 같은 값을 반환합니다 : 사전에 관해서는 지금 우리가 예를 들어, 키가 다른 요소에 액세스 할 수 있습니다 "전지". 다음과 같이 할 수 있습니다.

print(bo[0]["fields"][0]["fieldId"]) 

희망이 있습니다.

+0

이것은 톤을하는 데 도움이, 감사합니다! 인쇄 (bo [ "busObId"])를 시도하면 오류가 발생하지만 게시 한 두 번째 형식은 완벽하게 작동합니다. – user2001872