Python 和 Javascript 的 JSON 对接的 NaN 问题

作者: , 共 750 字 , 共阅读 0

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

类似文章:
编程 » C++, 数据容器, folly
folly::dynamic提供类似于C++的动态类型。和std::any可以容纳任意类型不一样,folly::dynamic只支持保存以下几种类型:
Python 数据分析工具 pandas 中以 DataFrame 和 Series 作为主要的数据结构。
编程 »
Python的命令行包argparse内置了-h, --help命令。但它没有分组,和其它的命令混在一起,并且显示在最前面。我更喜欢把它放在单独的「LOG 和帮助」分组:
相似度: 0.057
编程 » Python
Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止。下面命令可以查看当前的搜索路径:
IT » windows terminal, SSH
微软放出了 windows terminal 的正式版,它不光是 windows 自带的命令行终端,也可以用来替代 mobaterm 之类的 SSH 客户端。下面是其设置的一些笔记。