2017-12-09 1 views
0

인터넷 검색을 하루 종일 보내고 파이썬 코드를 작성하여 "코드"값만 나열하면 내 출력이 Service1, Service2, Service2가 될 수 있으므로 정말 느려야합니다. 복잡한 json 또는 dict 구조에서 json 값을 추출했습니다. 하지만 지금 나는 정신적 블록에 부딪혔을 것입니다.이상한 중첩 된 파이썬에서 값 추출

이것은 json 구조입니다.

myjson=''' 

{ 
    "formatVersion" : "ABC", 
    "publicationDate" : "2017-10-06", 
"offers" : { 
"Service1" : { 
    "code" : "Service1", 
    "version" : "1a1a1a1a", 
    "index" : "1c1c1c1c1c1c1" 
}, 
"Service2" : { 
    "code" : "Service2", 
    "version" : "2a2a2a2a2", 
    "index" : "2c2c2c2c2c2" 
}, 
"Service3" : { 
    "code" : "Service4", 
    "version" : "3a3a3a3a3a", 
    "index" : "3c3c3c3c3c3" 
    } 
    } 
} 
''' 
#convert above string to json 
somejson = json.loads(myjson) 
print(somejson["offers"]) # I tried so many variations to no avail. 
+1

이에 대한 이상한 무엇입니까? 나에게 완벽하게 정상적인 중첩 된 dict처럼 보입니다. 단 약간의 특이한 점은'offer '도리스트가 아니라 dict이라는 점이다. –

+0

복사/붙여 넣기가 완벽하게 작동합니다. 뭐가 잘못 됐어, 뭘 기대 했니? – glenfant

답변

0

somejson["offers"]은 사전입니다. 그 열쇠를 인쇄하고 싶습니다. 파이썬 2에서

:

print(somejson["offers"].keys()) 

파이썬 3에서 : 파이썬 3 keys()는 '보기'가 아니라 목록이기 때문에

print([x for x in somejson["offers"].keys()]) 

파이썬 3에서는 지능형리스트를 사용해야합니다.

+0

환상적입니다! 감사. 그리고 "버전"값을 나열하는 방법? –

+0

가장 안쪽에있는 사전 (''code "','"version "'및'" ""' "이있는 항목)을 나열하려면, 예를 들어 다음과 같이하면됩니다. somejson에서 x에 대한 print ([x [ "version"] [ "offers"]. values ​​()])'. 이것은 그의 대답에서 @glenfant에 의해 언급되었습니다. –

+0

당신은 생명의 은인입니다. 고마워, 숀. –

0

json의 서비스 수에 대해 확실하지 않으면 트릭을해야합니다.

import json 
myjson=''' 

{ 
    "formatVersion" : "ABC", 
    "publicationDate" : "2017-10-06", 
"offers" : { 
"Service1" : { 
    "code" : "Service1", 
    "version" : "1a1a1a1a", 
    "index" : "1c1c1c1c1c1c1" 
}, 
"Service2" : { 
    "code" : "Service2", 
    "version" : "2a2a2a2a2", 
    "index" : "2c2c2c2c2c2" 
}, 
"Service3" : { 
    "code" : "Service4", 
    "version" : "3a3a3a3a3a", 
    "index" : "3c3c3c3c3c3" 
    } 
    } 
} 
''' 
#convert above string to json 
somejson = json.loads(myjson) 


#Without knowing the Services: 
offers = somejson["offers"] 
keys = offers.keys() 

for service in keys: 
    print(somejson["offers"][service]["code"]) 
+0

에있는 모든 것? 예상 출력을 보여 주거나 제시하는 코드? – CodeCollector

2

또는, 당신은 "코드"거즈를 원하는 경우 :

>>> [s['code'] for s in somejson['offers'].values()] 
['Service1', 'Service2', 'Service4']