set 객체는 JSON을 직렬화할 수 없습니다.
다음 코드를 실행하려고 하면:
import json
d = {'testing': {1, 2, 3}}
json_string = json.dumps(d)
다음과 같은 예외가 있습니다.
Traceback (most recent call last):
File "json_test.py", line 4, in <module>
json_string = json.dumps(d)
File "/usr/lib/python2.7/json/__init__.py", line 243, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: set([1, 2, 3]) is not JSON serializable
어떻게 하면 정상적으로 사용할 수 있을까요?json.dumps을 포함하는 오브젝트와 함께sets?
일련화하기 전에 집합을 목록으로 변환하거나 사용자 지정 사용default핸들러:
def set_default(obj):
if isinstance(obj, set):
return list(obj)
raise TypeError
result = json.dumps(yourdata, default=set_default)
고칠 수 없어요.
이 오류는 "json.dumps가 데이터 유형 "set"을 지원하지 않음을 의미합니다.JSON은 javascript에서 유래한 것입니다.그리고 Javascript에는 Python의 "set"과 같은 데이터 유형은 없습니다.그래서 Python은 JSON을 사용하여 'set'을 처리할 수 없습니다.
따라서 @Martijn Pieters가 언급한 것과 같은 다른 접근법이 필요합니다.
갱신하다
이런 말 하는 걸 깜빡했네요.
JSON을 지원하지 않는 "set" 또는 다른 python 개체를 덤프하려면pickle또는cPickle모듈.Python에서만 "dump.txt"를 사용하는 경우 도움이 될 수 있습니다.
import cPickle
d = {'testing': {1, 2, 3}}
#dump
with open("pickledump.txt", "w") as fp:
cPickle.dump(d, fp)
#load
with open("pickledump.txt", "r") as fp:
x = cPickle.load(fp)
언급URL : https://stackoverflow.com/questions/22281059/set-object-is-not-json-serializable
'source' 카테고리의 다른 글
| jQuery ajax 요청이 루프에서 완료될 때까지 기다리는 방법 (0) | 2023.04.03 |
|---|---|
| Scala: JSON을 케이스 클래스로 직접 해석 (0) | 2023.04.03 |
| 절을 사용하여 문 업데이트 (0) | 2023.04.03 |
| 특정 연락처 7 폼의 wpcf7mailsent 타깃 (0) | 2023.04.03 |
| 학습되지 않은 구문 오류:위치 0의 JSON에 예기치 않은 토큰 u가 있습니다. (0) | 2023.04.03 |