强制 JSON.stringify() 发出 NaN / Infinity 或这样做的 JS JSON 库

2023-11-22

我正在研究向使用 JSONRPC 进行客户端/服务器交互的现有科学应用程序添加 NaN/Infinity 支持的可行性。许多 JSON 库确实处理(在某些情况下可选)NaN 和 Infs,例如:

  • Python json读取和写入
  • Java Jackson读取但写入字符串而不是裸字
  • Java GSON读取和写入
  • JavaScript 可以read

我知道 NaN 和 Infinity 不支持JSON规范,并且我知道related 问题。然而,AFAICT 是否有某种方法强制原生 JS 的问题JSON.stringify()发出 NaN/Infinity 的方法,或者,有一个 JS JSON 库可以执行相同的操作,但尚未得到解答。也许与所提到的问题有细微的差别,但很重要。到目前为止,我还无法发现这样的方法或库,所以我在这里。编写自己的 JSON 序列化器是唯一的选择吗?

请注意,replacement的参数JSON.stringify()没有帮助,至少在我手中。

UPDATE:将 NaN/Infinity 等作为字符串发出会使这些字符串的语义不明确。它们需要像 Python 和 GSON 实现中一样作为裸字发出。


这是一个例子

JavaScript

var array1 = [-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity],
    json = JSON.stringify(array1, function (key, value) {
        if (value !== value) {
            return 'NaN';
        }

        if (value === Infinity) {
            return 'Infinity';
        }

        if (value === -Infinity) {
            return '-Infinity';
        }

        return value;
    }),
    array2 = JSON.parse(json, function (key, value) {
        if (value === 'NaN') {
            return NaN;
        }

        if (value === 'Infinity') {
            return Infinity;
        }

        if (value === '-Infinity') {
            return -Infinity;
        }

        return value;
    });

console.log(json);
console.log(array2);

Output

["-Infinity",-1,0,1,2,"NaN",4,5,"Infinity"]
[-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity]

参考

JSON.stringify

JSON解析

On jsFiddle

Update:

JavaScript

var array1 = [-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity],
    json = JSON.stringify(array1, function (key, value) {
        if (value !== value) {
            return '0/0';
        }

        if (value === 1/0) {
            return '1/0';
        }

        if (value === -1/0) {
            return '-1/0';
        }

        return value;
    }),
    array2 = JSON.parse(json, function (key, value) {
        if (value === '0/0') {
            return 0/0;
        }

        if (value === '1/0') {
            return Infinity;
        }

        if (value === '-1/0') {
            return -1/0;
        }

        return value;
    });

console.log(json);
console.log(array2);

Output

["-1/0",-1,0,1,2,"0/0",4,5,"1/0"]
[-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity] 

On jsFiddle

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制 JSON.stringify() 发出 NaN / Infinity 或这样做的 JS JSON 库 的相关文章

随机推荐

  • C++20 标准对于将主题用作模板非类型参数有何规定?

    The 模板非类型参数 文章 模板参数和模板参数 的段落指出 唯一的例外是引用的非类型模板参数 或指针类型以及引用或指针的非静态数据成员 输入类类型及其子对象的非类型模板参数 C 20 起 不能引用 成为以下地址 临时对象 包括在引用初始化
  • 通过 Google Chrome 扩展访问本地文件?

    我需要从本地文件将名称列表加载到我的 google chrome 扩展中 如何才能做到这一点 如果文件本身附带扩展名怎么办 如果此文件随您的扩展一起提供 那么您可以使用以下命令加载它XMLHttpRequest内部背景页面 使用相对路径 带
  • 嵌入式(ASP.NET)网络服务器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找适用于 NET 的轻量级可嵌入 Web 服务器 我需要它来伪造 SOAP Web 服务以进行自动化测试 因此如果它支持 ASP NET W
  • jQuery Ajax 到 asp.net asmx Web 服务抛出请求格式无效:application/json

    我让 jquery 使用整数调用 asp net web 服务 在我们移植到 net 4 0 的旧应用程序上 我无法让此调用正常工作 我可以调用一个没有参数的方法 但将数据发送到 Web 方法会返回以下错误 System InvalidOp
  • 如何在 Android 设备中检测来电?

    我正在尝试制作一个应用程序 例如当电话打来电话时我想检测号码 以下是我尝试过的方法 但它没有检测到来电 我想运行我的MainActivity在后台 我该怎么做 我已给予许可manifest file
  • 我应该如何构建一个简单的 ASP.NET MVC 应用程序?

    我一直在阅读一些有关 ASP NET MVC SOLID 等的内容 并且正在尝试为中小型 ASP NET MVC 应用程序找出一个简单的 秘诀 将这些概念整合在一起 我最关心的问题是控制器过于复杂 就像网络表单中的代码隐藏文件 其中包含所有
  • Cython 和 fortran - 如何在没有 f2py 的情况下一起编译

    最终更新 这个问题是关于如何写一个setup py这将编译一个 cython 模块 该模块可以像 C 一样直接访问 FORTRAN 代码 这是一个相当漫长而艰巨的解决方案旅程 但完整的混乱情况包含在下面作为上下文 原问题 我有一个扩展 它是
  • 无论系统是32位还是64位,int都是32位,long还是64位吗?

    在java中 无论体系结构是32位还是64位 int是否保证始终为32位大小和long为64位大小 Java 是平台无关的 所以int是 32 位 并且long是 64 位的
  • Android 开关 - 在开/关时更改开关背景

    does someone know how I can implement a switch like this in my application 或者如何更改标准开关打开 关闭时的背景颜色 以下是供您开始使用的示例 XML
  • 在泽西岛从 1.9 升级到 Jackson 2.0 不起作用

    我正在使用 Jackson 位于泽西岛 来序列化实体 并且我正在从 Jackson 1 9 迁移到 2 0 我跟着本指南 一开始似乎一切都很顺利 但仔细观察发现 Jackson 1 9 仍在用于序列化我的响应 因此忽略了我的 迁移的 Jac
  • 如何计算沿直线的镜像点?

    在二维平面中 我有一个点和一条线 如何获得沿着这条线的镜像点 当在计算机程序中完成类似的事情时 您可能需要处理的问题之一是仅使用整数算术 或尽可能多 来执行这些计算 假设输入是整数 尽可能以整数进行此操作是一个单独的问题 我不会在这里讨论
  • 如何获取子进程的完整返回值?

    我需要捕获子进程的返回值 问题是 使用等待进程 函数我只能捕获返回值的8位 WEXITSTATUS wstatus 返回子进程的退出状态 这包括 孩子状态参数的最低有效 8 位 在对 exit 3 或 exit 2 的调用中指定或作为参数指
  • 如何使用“sum(iterable,[])”展平嵌套列表? [复制]

    这个问题在这里已经有答案了 我正在使用Python 3 6 我遇到了以下方法来展平嵌套列表sum a 1 2 3 4 5 6 sum a 返回 1 2 3 4 5 6 这里究竟发生了什么 Sum 接受一个可迭代对象 在本例中是一个列表 和一
  • Python 中两个范围列表的交集

    我的一个朋友向我传递了他最近收到的一个面试问题 我对我的解决方案不太满意 问题如下 你有两个清单 每个列表将包含长度为 2 的列表 表示一个范围 即 3 5 表示从 3 到 5 含 的范围 您需要返回集合之间所有范围的交集 如果我给你 1
  • 在 Android 上从 gcm 迁移到 fcm

    我想在 Android 应用程序中从 gcm 迁移到 fcm 我是否需要从 gcm 向 Android 应用程序的老用户发送推送通知 或者我可以通过服务器的新 fcm 发送通知 FCM 工作正常我可以通过 fcm 在我的设备上接收推送通知
  • 不构建核心库时不明智或错误地使用核心类(java.* 或 javax.*)

    当我清理项目时 出现以下错误 2011 10 05 13 47 53 The Basics Dx trouble processing java nio CharBuffer class Ill advised or mistaken us
  • Python:重载特定类型的运算符

    我希望能够让我的类的运算符以我定义的方式与常规类型进行交互 比方说 我有 class Mynum object def init self x self x x def add self other return self x other
  • 如果出现平局,Python 会选择哪个最大值?

    当使用max Python 中的函数查找列表 或元组 字典等 中的最大值 并且最大值存在并列 Python 选择哪一个 是随机的吗 例如 如果一个人有一个元组列表并且一个人选择一个最大值 使用key 基于元组的第一个元素 但有不同的第二个元
  • React 组件中的 Children 属性

    我现在正在学习反应 这是代码的链接 http redux js org docs basics ExampleTodoList html 我有点难以理解这部分代码中发生的事情 const Link active children onCli
  • 强制 JSON.stringify() 发出 NaN / Infinity 或这样做的 JS JSON 库

    我正在研究向使用 JSONRPC 进行客户端 服务器交互的现有科学应用程序添加 NaN Infinity 支持的可行性 许多 JSON 库确实处理 在某些情况下可选 NaN 和 Infs 例如 Python json读取和写入 Java J