在JSON API中表示无穷大的最佳方式是什么?例如,免费阅读本月的文章(在一些订阅上这将是有限的数目,而在高级订阅上这将是无限的)。对于这个用例,返回null或者 * 扩展 * JSON并使用javascript的Infinity值是更好的主意吗?后者似乎更合适,但我从未见过这样做的API示例。如果有人有任何代表无限的公共Web API的例子,那也会很酷。
null
Infinity
rkkpypqq1#
我会包括一个字段“limit”,它只存在于真正有限制的时候:当用户还剩40时:
{ "yourdata":"", "limit": 40 }
当用户具有无限制访问权限时,将其删除,这意味着没有限制:
{ "yourdata":"" }
k4ymrczo2#
我的建议是使用数字表示特定值,使用字符串表示理论值。我想这是最清楚的。
{ "shoes": 89, "cars": "infinity", "myBankAccount": "negative-infinity" }
然而,这似乎不是流行的选择。我已经看到-1、null和undefined(没有属性)在许多情况下意味着无限。在VMware中,我们使用-1来指定没有限制(内存、CPU、VM),我们在使用null时遇到了问题,因为BlazeDS将null转换为0,而0是一个有效值。
-1
undefined
whitzsjs3#
数字1e500被解析为Infinity
console.log(1e500); // Gives Infinity Or JSON.parse('{"number": 1e500}'); // Gives {number: Infinity}
cunj1qz14#
也许将无限订阅表示为完全不同的订阅类型会更好,所以你甚至没有如何表示无穷大的问题。将来你可能想尝试基于时间而不是数字的订阅,例如:例如,在一个月内无限制地访问,然后你将不得不处理一个expriry日期。也就是说,一个有限但足够大的数字,比如1 e100,难道不可以吗?如果你做数学计算,在浮点运算的有限精度中,1 e100 - 1 = 1 e100。
baubqpgj5#
无法扩展JSON。你可以扩展它,但它不再是JSON了。没有办法在JSON中表示Infinity或NaN。数字有非常严格的语法,Infinity或NaN不是其中的一部分。你可以存储一个非常大的值(1 e300),你可以使用一个字符串“Inf”或“NaN”,并确保每个处理它的人都正确地处理它,或者使用{“value”:“Inf”},然后你可以相当肯定,每个人要么正确处理它,要么崩溃。
cyej8jka6#
Python的json库将IEEE inf值解析为Infinity:
inf
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}
lh80um4z7#
我建议使用JavaScript Infinity值,因为它是一致的。例如:
var x = 1; var y = 0; var z = x / y; console.log(z); // results in `Infinity`
我会说null也是另一个选择,但这可能会被误认为 * 没有值 *,因为Infinity实际上是一个无限可能的值。不要使用NaN。这是一个奇怪的野兽,ES为这个异常道歉。举个例子:
NaN
var x = NaN; if (x === x) { console.log('Good'); } else { console.log('What?'); }
上面的答案是“什么?这告诉我们NaN实际上是某种不是数字的值。另外,它的typeof是一个number。你可以知道它是正无穷大还是负无穷大。如果您正在处理数字,请使用Infinity。它始终等于Infinity,并且将是最佳解决方案。
typeof
number
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个
7条答案
按热度按时间rkkpypqq1#
我会包括一个字段“limit”,它只存在于真正有限制的时候:
当用户还剩40时:
当用户具有无限制访问权限时,将其删除,这意味着没有限制:
k4ymrczo2#
我的建议是使用数字表示特定值,使用字符串表示理论值。我想这是最清楚的。
然而,这似乎不是流行的选择。我已经看到
-1
、null
和undefined
(没有属性)在许多情况下意味着无限。在VMware中,我们使用-1来指定没有限制(内存、CPU、VM),我们在使用null时遇到了问题,因为BlazeDS将null转换为0,而0是一个有效值。
whitzsjs3#
数字1e500被解析为Infinity
cunj1qz14#
也许将无限订阅表示为完全不同的订阅类型会更好,所以你甚至没有如何表示无穷大的问题。将来你可能想尝试基于时间而不是数字的订阅,例如:例如,在一个月内无限制地访问,然后你将不得不处理一个expriry日期。
也就是说,一个有限但足够大的数字,比如1 e100,难道不可以吗?如果你做数学计算,在浮点运算的有限精度中,1 e100 - 1 = 1 e100。
baubqpgj5#
无法扩展JSON。你可以扩展它,但它不再是JSON了。没有办法在JSON中表示Infinity或NaN。数字有非常严格的语法,Infinity或NaN不是其中的一部分。
你可以存储一个非常大的值(1 e300),你可以使用一个字符串“Inf”或“NaN”,并确保每个处理它的人都正确地处理它,或者使用{“value”:“Inf”},然后你可以相当肯定,每个人要么正确处理它,要么崩溃。
cyej8jka6#
Python的json库将IEEE
inf
值解析为Infinity
:输出:
python json库也知道如何解析这种非标准的json符号:
输出:
lh80um4z7#
我建议使用JavaScript Infinity值,因为它是一致的。
例如:
我会说
null
也是另一个选择,但这可能会被误认为 * 没有值 *,因为Infinity
实际上是一个无限可能的值。不要使用
NaN
。这是一个奇怪的野兽,ES为这个异常道歉。举个例子:
上面的答案是“什么?这告诉我们NaN实际上是某种不是数字的值。
另外,它的
typeof
是一个number
。你可以知道它是正无穷大还是负无穷大。如果您正在处理数字,请使用Infinity
。它始终等于Infinity
,并且将是最佳解决方案。更新
从HERE-您可以用途:
{ a:{ is_infinity:true,值:null },B:{ is_infinity:false,值:10个