사전을 JSON으로 변환


348
r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
file.write(str(r['rating']))

JSON에서 데이터에 액세스 할 수 없습니다. 내가 뭘 잘못하고 있죠?

TypeError: string indices must be integers, not str

답변:


536

json.dumps()사전을 str객체가 아닌 객체 로 변환 json(dict)합니다! 당신은로드가 귀하의 strdict사용하여 그것을 사용하는 json.loads()방법을

json.dumps()저장 방법 및 json.loads()검색 방법으로 참조하십시오 .

다음은 더 이해하는 데 도움이되는 코드 샘플입니다.

import json

r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
loaded_r = json.loads(r)
loaded_r['rating'] #Output 3.5
type(r) #Output str
type(loaded_r) #Output dict

11
json loaded_r을 이미 가지고 있다고 가정하면 별도의 변수에 json을 다시로드하는 것이 조금 비효율적이라고 생각하지 r않습니까?
Tim

안녕! 나는 이것이 매우 오래된 대답이라는 것을 알고 있지만 한 가지를 정리할 수 있기를 바랍니다. @TimCastelijns는 json을 새로운 변수 loaded_r에 다시로드하는 것이 비효율적이라고 언급했습니다. 이를 수행하는 효율적인 방법은 r = json.loads (r)를 명시하는 것입니까?
SchrodingersStat

2
@SchrodingersStat 안녕하세요. 나는 이것이 성능을 크게 변화시키지 않는다고 생각합니다. 'timeit'기능을 사용하여 확인할 수 있습니다. 빠른 json로드 / 덤프를 원한다면 'ujson'라이브러리를 사용할 수 있습니다!
Iman Mirzadeh

14
@TimCastelijns가 Imran의 의도를 오해 한 것 같습니다. JSON은 새로운 정보이기 때문에 새로운 변수에로드되지만 새로운 사전의 값, 즉 JSON 인코딩 및 디코딩 왕복 후의 값이 동일하다는 것을 보여줍니다.
덤블 다드

43

json.dumps()파이썬 dict의 JSON 문자열 표현을 반환합니다. 문서를 참조하십시오

r['rating']r은 더 이상 dict이 아닌 문자열이므로 수행 할 수 없습니다.

아마도 당신은 같은 것을 의미했습니다

r = {'is_claimed': 'True', 'rating': 3.5}
json = json.dumps(r) # note i gave it a different name
file.write(str(r['rating']))

2

를 사용하여 문자열로 변환 할 필요가 없습니다. json.dumps()

r = {'is_claimed': 'True', 'rating': 3.5}
file.write(r['is_claimed'])
file.write(str(r['rating']))

dict 객체에서 직접 값을 가져올 수 있습니다.


1

r을 사전으로 정의하면 트릭을 수행해야합니다.

>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.