【发布时间】:2021-09-12 10:36:26
【问题描述】:
我正在使用 JsonParser.parseString,如果我给出像“1234”或“abcd”这样的值(忽略大小写),它就会传递。谁能解释一下?
【问题讨论】:
标签: json api rest validation parsing
我正在使用 JsonParser.parseString,如果我给出像“1234”或“abcd”这样的值(忽略大小写),它就会传递。谁能解释一下?
【问题讨论】:
标签: json api rest validation parsing
我正在使用 JsonParser.parseString,如果我给出像“1234”或“abcd”这样的值(忽略大小写),它就会传递。谁能解释一下?
current specification for application/json 是 RFC 8259
生产规则的亮点:
JSON-text = ws value ws
value = false / null / true / object / array / number / string
number = [ minus ] int [ frac ] [ exp ]
int = zero / ( digit1-9 *DIGIT )
string = quotation-mark *char quotation-mark
quotation-mark = %x22 ; "
因此:
数字序列(例如:1234)是有效的 JSON 文本
用双引号括起来的数字序列(例如:“1234”)是有效的 JSON 文本
用双引号括起来的“未转义”字符序列(例如:“abcd”)是有效的 JSON 文本
不带双引号的“未转义”字符序列(例如:abcd)不是有效的 JSON 文本。
cat <<TEST | jq .
"abcd"
TEST
"abcd"
cat <<TEST | jq .
abcd
TEST
parse error: Invalid numeric literal at line 2, column 0
【讨论】:
您的第一个示例是数字的有效 JSON。使用 JavaScript 的解析器:
console.log(JSON.parse('1234'));
在我看来,JSON 解析器不太可能对您的第二个示例感到满意,因为它无效:
console.log(JSON.parse('abcd'));
...除非它实际上有引号,在这种情况下,它是字符串的有效 JSON:
console.log(JSON.parse('"abcd"'));
但即使是对象也不必有空格,例如:
console.log(JSON.parse('{"example":"object"}'));
【讨论】: