2010-11-27 5 views
1

내 응용 프로그램에서 사전의 사전을 닮은 일부 json 스타일 유니 코드 문자열을 반환하는 서버에 연결하고 있습니다.중첩 된 사전/json의 분해 및 디코딩

>>> jsonData = json.loads(data) 
>>> jsonData 
{u'1': {u'id': u'1', u'name': u'autos'}, u'3': {u'id': u'3', u'name': u'cities'}, u'2': {u'id': u'2', u'name': u'business'},} 
>>> type(jsonData) 
<type 'dict'> 

:

{'1': u'autos','3': u'cities'}

그래서 내가 JSON 모듈에 내장 된 응답을로드 : 결과적으로이 같은 키와 유니 코드 값으로 id 하나 개의 수평 사전을 좀하고 싶습니다 여기서 반환 된 객체를 볼 수 있습니다. 그렇다면 그것을 분해하여 부모 사전을 없애야합니다. 그리고 마지막으로 ID를 인코딩합니다. 인코딩을 수행하는 방법은 두 가지가 있습니다. 하나 :

>>> import unicodedata 
>>> unicodedata.normalize('NFKD', data).encode('ascii','ignore') 

및 초 :이 작업, 특히 분해를해야하는 방법

>>> data.encode('ascii','ignore') 

?

+0

"부모 사전을 삭제 하시겠습니까?" 작업이 끝나면 원하는 모습을 지정할 수 있습니까? –

+0

은 (는) 실제 위치와 관련이 없으므로 – decarbo

답변

2

이 작동합니다 : 당신은 또한 dugres '대답으로, 발전기 식을 사용할 수

outputdata = {} 
for id, stuff in jsonData.iteritems(): 
    outputdata[id.encode("ascii")] = stuff[u"name"] 

.

+0

'dict ((i.encode ("ascii"), s [u "name"]) jsonData.items())의 i는 더 짧을 것입니다 (그러나 본질적으로 동일합니다). –

+0

@Sven : 당신이 2.7/3.1을 사용한다면, 그것은 더 짧아집니다 :'{i.encode ("ascii") : s [u "name"] for jsonData.items()}'. 하지만 나는 기본에 충실 할 거라고 생각했다 .-) –

+0

아, 그리고 2.x의 경우 iteritems()를 사용하지 않았지만 ... –

0
decomp=dict((v['id'], v['name']) for v in jsondata.values()) 
+0

발전기를 사용할 수 없습니다. 아직도 대답 주셔서 감사합니다. – decarbo