在JSON API中表示无穷大的最佳方法是什么?例如可以自由阅读本月的文章(这在某些订阅上是有限的数字,在高级订阅上是无限的)。
为此用例返回null
或扩展 JSON并使用javascript的Infinity
值是否更好?后者似乎更合适,但我从未见过这样做的API的例子。
如果有人有任何代表无限的公共Web API的例子,也会很酷。
答案 0 :(得分:4)
我会包含一个字段" limit",只有在确实存在限制时才存在:
当用户剩下40时:
{
"yourdata":"",
"limit": 40
}
当用户无限制访问时将其删除,这意味着没有限制:
{
"yourdata":""
}
答案 1 :(得分:4)
我的建议是使用特定值的数字和理论值的字符串。我认为这是最清楚的。
{
"shoes": 89,
"cars": "infinity",
"myBankAccount": "negative-infinity"
}
然而,这似乎不是受欢迎的选择。我见过-1
,null
和undefined
(缺少属性)在很多情况下意味着无限制。
在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实际上是某种不是数字的价值。
此外,它的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,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}