一般而言,在 Python 里:
obj_json = json.dumps(obj)
在 Javascript 里面再:
obj = JSON.parse(obj_json);
但NaN
是一个特例,它在 Python 里被转为字符串"NaN",并且可以被json.loads
识别。但它无法被 Javascript JSON 模块识别。在 Javascript 中,JSON.stringify(NaN)
被转为"null",并且无法转回。其原因是NaN
不在 json 标准内。
似乎没什么好办法,可以自己定义一个dumps
:
import json
import math
def dumps(obj, *args, **kwargs):
def consistent(obj):
if math.isnan(obj) or math.isnan(obj):
return None
if isinstance(obj, dict):
for key, value in obj.items():
obj[key] = consistent(value)
elif isinstance(obj, list):
for idx, value in enumerate(obj):
obj[idx] = consistent(value)
return obj
return json.dumps(consistent(obj), *args, **kwargs)
Q. E. D.