source

Python에서 JSON을 시리얼화할 때 "TypeError: (Integer) is not JSON serializable?" (유형 오류: (Integer)는 JSON serializable입니까?)

ittop 2023. 3. 8. 21:47
반응형

Python에서 JSON을 시리얼화할 때 "TypeError: (Integer) is not JSON serializable?" (유형 오류: (Integer)는 JSON serializable입니까?)

python에서 json 파일로 간단한 사전을 보내려고 하는데 "TypeError: 1425 is not JSON serializable" 메시지가 계속 나타납니다.

import json
alerts = {'upper':[1425],'lower':[576],'level':[2],'datetime':['2012-08-08 15:30']}
afile = open('test.json','w')
afile.write(json.dumps(alerts,encoding='UTF-8'))
afile.close()

default 인수를 추가하면 입력되지만 정수 값은 문자열로 json 파일에 입력되므로 바람직하지 않습니다.

afile.write(json.dumps(alerts,encoding='UTF-8',default=str))

나는 내 문제를 찾았다.문제는 내 정수가 실제로 활자였다는 것이다.

numpy를 폐기하는 데 문제가 있는 것 같습니다.Python 3의 json 문자열에 int64를 삽입하고 Python 팀은 이미 이에 대해 논의 중입니다.자세한 내용은 여기를 참조하십시오.

Serhiy Storchaka가 제공한 해결 방법이 있습니다.매우 잘 작동하므로 여기에 붙여 넣습니다.

def convert(o):
    if isinstance(o, numpy.int64): return int(o)  
    raise TypeError

json.dumps({'value': numpy.int64(42)}, default=convert)

@JAC가 최고 등급 응답 코멘트에서 지적한 바와 같이 일반 솔루션(모든 numpy 유형에 대한)은 numpy dtypes를 네이티브 python 유형으로 변환하는 스레드에서 찾을 수 있습니다.

다만, 이하에 제 버전의 솔루션을 추가합니다.저의 경우는, 이러한 답변과 다른 스레드의 답변을 조합한 범용 솔루션이 필요했기 때문입니다.이것은 거의 모든 numpy 타입에서 동작합니다.

def convert(o):
    if isinstance(o, np.generic): return o.item()  
    raise TypeError

json.dumps({'value': numpy.int64(42)}, default=convert)

숫자 변환만 하면 됩니다.int64(numpy에서)로int.

예를 들어 변수인 경우xint64 입니다.

int(x)

가 int64 배열인 경우:

map(int, x)

Numpy 데이터 유형이 있습니다. 정상으로 변경하십시오.int()또는float()data type 입니다.잘 될 거야

늦은 답변일 수도 있지만, 최근에 같은 오류가 발생했습니다.서핑을 많이 한 후에 이 솔루션이 도움이 되었습니다.

alerts = {'upper':[1425],'lower':[576],'level':[2],'datetime':['2012-08-08 15:30']}
def myconverter(obj):
        if isinstance(obj, np.integer):
            return int(obj)
        elif isinstance(obj, np.floating):
            return float(obj)
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        elif isinstance(obj, datetime.datetime):
            return obj.__str__()

불러myconverterjson.dumps()아래와 같이. json.dumps(alerts, default=myconverter).

이것으로 문제가 해결되었습니다.

def serialize(self):
    return {
        my_int: int(self.my_int), 
        my_float: float(self.my_float)
    }

같은 문제입니다.목록에는 의 번호가 포함되어 있습니다.저에게 있어서 간단한 회피책은

mylist = eval(str(mylist_of_integers))
json.dumps({'mylist': mylist})

즉,list로.str()그리고.eval()함수는 Python 처럼 String을 평가하고 결과를 반환한다.list of integers저 같은 경우에는요.

다음 코드를 사용하여 문제를 해결합니다.

import json
from numpyencoder import NumpyEncoder
alerts = {'upper':[1425],'lower':[576],'level':[2],'datetime':['2012-08-08 
15:30']}
afile = open('test.json','w')
afile.write(json.dumps(alerts,encoding='UTF-8',cls=NumpyEncoder))
afile.close()

또는 먼저 개체를 데이터 프레임으로 변환할 수 있습니다.

df = pd.DataFrame(obj)

에 저장해 주세요.dataframein a a a a json 삭제:

df.to_json(path_or_buf='df.json')

도움이 되었으면 좋겠다

언급URL : https://stackoverflow.com/questions/11942364/typeerror-integer-is-not-json-serializable-when-serializing-json-in-python

반응형