问题描述
我尝试更好地理解 JSON 字符串。尤其是那种格式的数字。
检查 JSON 字符串是否为 valid number 很容易(如下所述),但是将数字解析为 JSON 字符串的约定是什么?
数字 5
可以很容易地解析为 "5"
,但我应该将 5000
解析为 "5000"
、"5e3"
还是 "5E3"
?
对于太小/太大以至于我们使用 e
的数字,是否有一个被广泛接受的(约定?)最小/最大界限?
关于这个主题的第二个问题:我将如何检查 JSON 字符串是否存储一个整数值。出现这个问题是因为 "5e-2"
是 0.05
。该字符串不包含 "."
但仍然是一个分数,这很重要。当然,我可以通过简单地使用 Number()
(JavaScript) 解析值并使用 Number.isInteger()
(JavaScript) 检查它是否是整数来实现。但这并不能帮助我真正更好地理解它。我可以检查字符串是否包含 "e-"
/"E-"
,然后检查以下数字是否大于 "."
/"e"
/{{1} 之前的位数}?
为了检查一个 JSON 字符串是否是一个有效的数字(不是整数),我在 JavaScript 中使用了这个正则表达式:
"E"
字符串可以以 // JavaScript
const isJsonNumberRegex = /^-?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?$/m;
function isJsonNumber(n: string): boolean {
return n.match(isJsonNumberRegex) !== null;
}
开头,然后是单个 "-"
或 数字 0
,然后可以选择后跟任意数量的数字 {{1 }}。如果是分数,则后跟 1-9
,然后是任意数量的数字 0-9
。要使用指数,它以字符 "."
或 0-9
开头,后跟可选的 "e"
或 "E"
,然后是任意数量的数字 "+"
。
例如:
"-"
解决方法
可以在此处找到 JSON 规范:base64 support
复制上面链接中的内容:
数字的表示方式与大多数 编程语言。一个数字包含一个整数分量 可以以可选的减号为前缀,后面可以跟 分数部分和/或指数部分。
因此,您的测试应符合这些规范。