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
.
예를 들어 변수인 경우x
int64 입니다.
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__()
불러myconverter
에json.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)
에 저장해 주세요.dataframe
in 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
'source' 카테고리의 다른 글
MVC 컨트롤러: HTTP 본문에서 JSON 개체를 가져오시겠습니까? (0) | 2023.03.08 |
---|---|
create-module-app을 사용하는 동안 public, src 및 scripts 폴더가 생성되지 않음 (0) | 2023.03.08 |
문의 양식 7 전화번호 확인 (0) | 2023.03.08 |
Angular.js: HH:mm:ss 필터까지의 초수 (0) | 2023.03.08 |
Wordpress : 태그의 투고 수를 카운트하는 방법 (0) | 2023.03.08 |