如何在JSON API中表示无穷大?

holgip5t  于 2023-05-02  发布在  其他
关注(0)|答案(7)|浏览(183)

在JSON API中表示无穷大的最佳方式是什么?例如,免费阅读本月的文章(在一些订阅上这将是有限的数目,而在高级订阅上这将是无限的)。
对于这个用例,返回null或者 * 扩展 * JSON并使用javascript的Infinity值是更好的主意吗?后者似乎更合适,但我从未见过这样做的API示例。
如果有人有任何代表无限的公共Web API的例子,那也会很酷。

rkkpypqq

rkkpypqq1#

我会包括一个字段“limit”,它只存在于真正有限制的时候:
当用户还剩40时:

{
    "yourdata":"",
    "limit": 40
}

当用户具有无限制访问权限时,将其删除,这意味着没有限制:

{
    "yourdata":""
}
k4ymrczo

k4ymrczo2#

我的建议是使用数字表示特定值,使用字符串表示理论值。我想这是最清楚的。

{
  "shoes": 89,
  "cars": "infinity",
  "myBankAccount": "negative-infinity"
}

然而,这似乎不是流行的选择。我已经看到-1nullundefined(没有属性)在许多情况下意味着无限。
在VMware中,我们使用-1来指定没有限制(内存、CPU、VM),我们在使用null时遇到了问题,因为BlazeDS将null转换为0,而0是一个有效值。

whitzsjs

whitzsjs3#

数字1e500被解析为Infinity

console.log(1e500); // Gives Infinity

Or

JSON.parse('{"number": 1e500}'); // Gives {number: Infinity}
cunj1qz1

cunj1qz14#

也许将无限订阅表示为完全不同的订阅类型会更好,所以你甚至没有如何表示无穷大的问题。将来你可能想尝试基于时间而不是数字的订阅,例如:例如,在一个月内无限制地访问,然后你将不得不处理一个expriry日期。
也就是说,一个有限但足够大的数字,比如1 e100,难道不可以吗?如果你做数学计算,在浮点运算的有限精度中,1 e100 - 1 = 1 e100。

baubqpgj

baubqpgj5#

无法扩展JSON。你可以扩展它,但它不再是JSON了。没有办法在JSON中表示Infinity或NaN。数字有非常严格的语法,Infinity或NaN不是其中的一部分。
你可以存储一个非常大的值(1 e300),你可以使用一个字符串“Inf”或“NaN”,并确保每个处理它的人都正确地处理它,或者使用{“value”:“Inf”},然后你可以相当肯定,每个人要么正确处理它,要么崩溃。

cyej8jka

cyej8jka6#

Python的json库将IEEE inf值解析为Infinity

import json

print(json.dumps({'an_inf': float("inf") }))

输出:

{"an_inf": Infinity}

python json库也知道如何解析这种非标准的json符号:

print(json.loads('{"new_sample_median": Infinity }'))

输出:

{'new_sample_median': inf}
lh80um4z

lh80um4z7#

我建议使用JavaScript Infinity值,因为它是一致的。
例如:

var x = 1;
var y = 0;

var z = x / y;

console.log(z);

// results in `Infinity`

我会说null也是另一个选择,但这可能会被误认为 * 没有值 *,因为Infinity实际上是一个无限可能的值。
不要使用NaN。这是一个奇怪的野兽,ES为这个异常道歉。
举个例子:

var x = NaN;

if (x === x) {
    console.log('Good');
} else {
    console.log('What?');
}

上面的答案是“什么?这告诉我们NaN实际上是某种不是数字的值。
另外,它的typeof是一个number。你可以知道它是正无穷大还是负无穷大。如果您正在处理数字,请使用Infinity。它始终等于Infinity,并且将是最佳解决方案。

var x = Math.log(0);

console.log(x);
console.log(typeof(x));

if (x === x) {
    console.log('yes');
}

更新

HERE-您可以用途:
{ a:{ is_infinity:true,值:null },B:{ is_infinity:false,值:10个

相关问题