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

时间:2016-01-24 13:29:56

标签: json api infinity

在JSON API中表示无穷大的最佳方法是什么?例如可以自由阅读本月的文章(这在某些订阅上是有限的数字,在高级订阅上是无限的)。

为此用例返回null扩展 JSON并使用javascript的Infinity值是否更好?后者似乎更合适,但我从未见过这样做的API的例子。

如果有人有任何代表无限的公共Web API的例子,也会很酷。

6 个答案:

答案 0 :(得分:4)

我会包含一个字段" limit",只有在确实存在限制时才存在:

当用户剩下40时:

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

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

{
    "yourdata":""
}

答案 1 :(得分:4)

我的建议是使用特定值的数字和理论值的字符串。我认为这是最清楚的。

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

然而,这似乎不是受欢迎的选择。我见过-1nullundefined(缺少属性)在很多情况下意味着无限制。

在VMware,我们使用-1来指定没有限制(内存,CPU,VM),并且我们在使用null时遇到问题,因为BlazeDS将null转换为0,而0是有效值。

答案 2 :(得分:0)

将无限订阅表示为完全不同的类型订阅可能会更好,所以你甚至没有如何表示无限的问题。将来,您可能希望尝试基于时间而非数字的订阅,例如一个月内无限制访问,然后你必须处理一个到期日。

那说,1e100不是一个有限但足够大的数字吗?如果你进行数学计算,1e100 - 1 = 1e100,浮点运算的精度有限。

答案 3 :(得分:0)

我建议使用JavaScripts 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实际上是某种不是数字的价值。

此外,它的typeofnumber。你可以判断它是正无穷大还是负无穷大。如果您正在处理数字,请使用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,value:null},b:{is_infinity:false,value:10}}

答案 4 :(得分:0)

您无法扩展JSON。好吧,你可以扩展它,但它不再是JSON了。无法用JSON表示Infinity或NaN。数字的语法非常严格,Infinity或NaN不属于它。

你可以存储一个非常大的值(1e300),你可以使用一个字符串&#34; Inf&#34;或&#34; NaN&#34;并确保每个处理它的人都能正确处理它,或者使用{&#34; value&#34;:&#34; Inf&#34;然后你可以确定每个人都正确处理它或崩溃。

答案 5 :(得分:0)

数字1e500被解析为无穷大


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

Or

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