我用的是numpy.float32
个数字,而不是JSON
.克服这个问题的正确方法是什么?
import numpy as np
import json
a = np.float32(1)
json.dumps(a)
TypeError: Object of type 'float32' is not JSON serializable
我用的是numpy.float32
个数字,而不是JSON
.克服这个问题的正确方法是什么?
import numpy as np
import json
a = np.float32(1)
json.dumps(a)
TypeError: Object of type 'float32' is not JSON serializable
It has to be a string, so you can have:
json.dumps(str(a))
EDIT:
JSON is a format for serialising object data. It doesn't really care or know about Python types, the json package tries to translate whatever object you pass json.dumps()
into a string form via a conversion table
that only supports some types (see doc below).
这就是为什么我认为传递一个字符串来避免这个问题是个好主意:numpy.float32
不在表中.
因为有些人 comments 说,显式地将字符串传递给dumps
"听起来是错误的",所以我将在这里添加文档
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw) Serialize obj to a JSON formatted str using this conversion table. The arguments have the same meaning as in dump().
Note Keys in key/value pairs of JSON are always of the type str. When a dictionary is converted into JSON, all the keys of the dictionary are coerced to strings. As a result of this, if a dictionary is converted into JSON and then back into a dictionary, the dictionary may not equal the original one. That is, loads(dumps(x)) != x if x has non-string keys.
taken from the official docs here: https://docs.python.org/3/library/json.html