javascript - 为什么 JSON 不支持 NaN 时 MongoDB 允许 NaN 值?

标签 javascript json python-3.x mongodb nan

我想请一位 Mongo 专家来解答这个问题。到目前为止,答案都是来自 JavaScript 方面。

这是我的场景。我使用 Python/Pandas 读取 CSV 并转换为 JSON 以存储在 MongoDB 中。我还有一个向 JavaScript 公开的 Python AWS Lambda API。具有错误值的数据最终会得到 NaN 值,MongoDB 很好地接受该值,Python 字典可以很好地处理它,并序列化为 JSON。但 JavaScript 无法解析它。我的临时修复是暂时将 NaN 更改为 0(在数据库中)。

我试图理解为什么 MongoDB/Python 允许这样做,但 JavaScript 不允许。是因为 JSON 本身缺乏标准吗?

如果我将其放入 JSONLint.com,它会快速识别问题。

{
    "name": "test",
    "value": NaN
}

在 JavaScript 中,我们在 Ajax 调用时遇到 ParseError(缩写版本):

    $.ajax({
        type: "POST",
        url: "https://da987tkpjg.execute-api.us-east-1.amazonaws.com/PROD",
        data: JSON.stringify({
            "body":{ ...
            }
        }),
        success: function(msg){
            console.log(msg);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            console.log(textStatus);
            console.log(errorThrown);
        }
      });

最佳答案

NaN 不是有效的 JSON 值。

A value can be a string in double quotes, or a number, or true or false or null, or an object or an array. These structures can be nested.
(source)

您需要在 python 中过滤掉这些值。

这并不是 JSON 规范中的“缺乏标准”,您只是输出了格式无效的 JSON。


至于为什么 MongoDB 返回 NaN:

猜测这是一个后备方案,然后将不是数字的内容输入到本应是数字的字段中>。为了类型安全,MongoDB 不能只返回该内容,因此它会为您提供它能告诉您的最好信息:NaN

请注意,NaN 是一个 JavaScript 概念。 JSON 受到 JS 对象表示法的启发,但在其他方面是不相关的。

关于javascript - 为什么 JSON 不支持 NaN 时 MongoDB 允许 NaN 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65565321/

相关文章:

python - 如何将命令从 Python turtle 图形发送到 EV3 乐高积木?

c# - 将 JSON 对象 A 转换为 JSON B 对象,其中 B 是 A 的严格子集。两者都由两个 json 模式管理。在 .net 核心中

python - 如何使用 python 查找网站的原始标题?

不同服务器上的 Python 3.5 dill pickling/unpickling : "KeyError: ' ClassType'"

Javascript:动态添加文本字段和选择标签未保存

java - Dropwizard/Jersey 在 GET 请求中给出 "Unable to process JSON"消息

python - Flask 中的 POST 请求和 Content-Type "application/json"无响应

javascript - 访问本地主机:3000 through localhost/myproject/index. html

javascript - Angular 是否接受带有连字符的属性?

javascript - 将线性阵列转换为矩阵的有效方法