source

set 객체는 JSON을 직렬화할 수 없습니다.

myloves 2023. 4. 3. 21:53

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