Python 和 Javascript 的 JSON 对接的 NaN 问题

作者: , 共 748 字 , 共阅读 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.

类似文章:
编程 » Python库
Python 的官方自带库json库处理 JSON 很方便,但它只支持标准的 JSON 格式。rapidjson 库来自于 json 的 C++库,速度比json库快五倍,而且支持一些非标准的 JSON 字符串。
编程 » Python, numpy
今天写 Python 代码时遇到一个恶心的 bug ,花了好一会才定位和搞清楚。我的目标是寻找第一个非 NAN 的数的位置(其中 array 是一个 numpy 向量),很自然有下面实现:
编程 » django, html, http, axios
我们用访问网页动态数据时,经常会提交一些参数,比如用axios.get
编程 » C++, 数据容器, folly
folly::dynamic提供类似于C++的动态类型。和std::any可以容纳任意类型不一样,folly::dynamic只支持保存以下几种类型:
相似度: 0.070
IT » javascript, vue
写项目的时候遇到有需要就往 package.json里面添加新的包,即使后面没用也忘了删除,结果越积累越多。depcheck是检查依赖项的工具,会提示哪些包没有实际用到。安装:
Python 数据分析工具 pandas 中以 DataFrame 和 Series 作为主要的数据结构。
编程 » Python
今天写一段程序时遇到一个问题,查了好一会才搞清楚。代码可以简化为下面这个小代码:
编程 » python, 单元测试
unittest 是 python 官方的单元测试工具。最近发现一个之前没注意到的盲区:
编程 » Python
在 Python 里,我们可以直接用 os.system 来执行系统命令(假设下面的 strip 是一个可以处理多个文件的第三者程序):
IT » windows terminal, SSH
微软放出了 windows terminal 的正式版,它不光是 windows 自带的命令行终端,也可以用来替代 mobaterm 之类的 SSH 客户端。下面是其设置的一些笔记。