javascript - Json字符串数字格式
问题描述
我尝试更好地理解 JSON 字符串。尤其是这种格式的数字。
检查 JSON 字符串是否为有效数字很容易(如后所述),但是将数字解析为 JSON 字符串的约定是什么?
该数字5
可以很容易地解析为"5"
,但我应该解析5000
为"5000"
、 to"5e3"
还是 to "5E3"
?
对于我们使用的太小/太大的数字,是否有一个被广泛接受的(约定?)最小/最大界限e
?
关于这个主题的第二个问题:我将如何检查 JSON 字符串是否存储整数值。出现这个问题是因为"5e-2"
是0.05
。该字符串不包含"."
但仍然是一个分数,这很重要。当然,我可以通过简单地用 (JavaScript) 解析值并用Number()
(JavaScript) 检查它是否是整数来做到这一点Number.isInteger()
。但这并不能帮助我更好地理解它。我可以检查字符串是否包含"e-"
/ "E-"
,然后检查以下数字是否大于"."
/ "e"
/之前的位数"E"
?
为了检查 JSON 字符串是否为有效数字(不是整数),我在 JavaScript 中使用了这个正则表达式:
// JavaScript
const isJsonNumberRegex = /^-?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?$/m;
function isJsonNumber(n: string): boolean {
return n.match(isJsonNumberRegex) !== null;
}
字符串可以以 开头"-"
,然后是单个数字0
或数字1-9
,然后可以选择后跟任意数量的数字0-9
。如果它是一个分数,它后面是 a "."
,然后是任意数量的 digits 0-9
。要使用指数,它以字符"e"
or开头"E"
,可选地后跟"+"
or "-"
,然后是任意数量的数字0-9
。
例如:
function isJsonNumber(n){
return n.match(/^-?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?$/m) !== null;
}
console.log(isJsonNumber("-12.34E+56")); // true
console.log(isJsonNumber("0.0e-010")); // true
console.log(isJsonNumber("+0")); // false
console.log(isJsonNumber(".5")); // false
console.log(isJsonNumber("a")); // false
解决方案
JSON 的规范可以在这里找到:https ://datatracker.ietf.org/doc/html/rfc4627#section-2.4
上面链接中所说的副本:
数字的表示类似于大多数编程语言中使用的表示。一个数字包含一个整数部分,它可以以可选的减号为前缀,其后可以是小数部分和/或指数部分。
因此,您的测试应该按照这些规范进行。
推荐阅读
- node.js - Sequelize .save() 在实例上不起作用
- html - 我不知道如何控制 ahref 的 CSS 高度
- css - SASS 实时编译器混合/变量在我更新主 scss 文件之前不会更新
- python - Pandas 数据框通过添加关联行的值来添加可点击的 url
- mysql - 带有内部联接的 SQL 插入试图插入错误的列
- python - 解码包含 Base64 的 JSON
- python - BST 树错误:TypeError:“int”和“Node”实例之间不支持“<=”
- python-3.x - 如何将 python git repos 作为包导入
- sharepoint - 具有多个条件的现代 SharePoint CAML 查询
- r - 将dfm转换为数据框时出错