7

Python 和 Javascript 的 JSON 对接的 NaN 问题

 3 years ago
source link: https://zhiqiang.org/coding/json-nan-between-python-and-javascript.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Python 和 Javascript 的 JSON 对接的 NaN 问题

作者: 张志强

, 发表于 2020-06-19

, 共 750 字 , 共阅读 7 次

一般而言,在 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.

avatar-0.jpg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK