2014-04-16 2 views
119

저는 Python에 익숙하지 않고 JSON 데이터를 가지고 놀고 있습니다. 기존의 JSON 객체에 키 - 값을 추가하여 동적으로 JSON 객체를 작성하고 싶습니다. Python으로 JSON 객체를 동적으로 빌드하는 방법은 무엇입니까?

나는 다음을 시도하지만 난 TypeError: 'str' object does not support item assignment를 얻을 :

import json 

data = {} 
data['key'] = 'value' 
json_data = json.dumps(data) 

JSON은 직렬화 형식, 텍스트입니다 :

import json 

json_data = json.dumps({}) 
json_data["key"] = "value" 

print 'JSON: ', json_data 

답변

270

당신은 객체를 구축 JSON 문자열로 인코딩 전 데이터 구조를 나타냅니다. 그것은 그 구조 자체가 아닙니다.

+0

귀하의 솔루션은 나를 위해 매력처럼 작동했습니다. 나는 네 마지막 줄의 의미를 이해할 수 없었다. 조금 더 자세히 설명해 주시겠습니까? 감사. – akki

+3

@akki : OP는 JSON 문자열 (객체를 인코딩하는 일련의 문자)을 객체 자체로 취급하려고했습니다. 그들은'json_data [ 'key'] = 'value ''를 사용하려고했는데'json_data'는 파이썬 사전이 아니기 때문에 작동하지 않습니다. –

7

이미 사전을 만들 수있는 솔루션이 있지만 (더 복잡한 데이터의 경우 중첩 된 사전) 개체를 만들려면 'ObjDict'를 시도해보십시오. 이것은 생성 될 json에 대한 훨씬 더 많은 제어를 제공합니다 (예 : 유지 순서). 개념을 선호하는 표현 일 수있는 객체로 빌드 할 수 있습니다.

pip install objdict first.

from objdict import ObjDict 

data = ObjDict() 
data.key = 'value' 
json_data = data.dumps() 
+0

이것이 내가 찾고 있었던 것입니다! dicts가 순서가 없다는 것을 감안할 때, 'json.dumps'즉'json.dumps (response, sort_keys = True, indent = 4) '를 호출 할 때 알파벳순으로 정렬 할 수 있지만 알파벳 순과 알파벳 순으로 붙어 있습니다. 선호하는 순서, 그룹화 및 표현 – Jonathan

4

파이썬 사전을 만들어 한 줄에 JSON으로 직렬화 할 수 있으며보기 흉한 것은 아닙니다.

my_json_string = json.dumps({'key1': val1, 'key2': val2}) 
관련 문제