JSON 文件中的键名有限制吗?

Edw*_*ard 4 regex json limits character-encoding special-characters

我想知道 JSON 格式的键名是否有任何限制。到目前为止,我见过的大多数示例中的键都与 RegExp 匹配[a-zA-Z\\-_]

\n\n
{\n  "name": "My Name",\n  "phone-number": 123\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但使用空格、斜杠、元音变音等也有效吗?

\n\n
{\n  "name with spaces": "My Name",\n  "[ph\xc3\xb6ne-/mobil\xc3\xa9-] number": 123,\n  "/\\- \\" )": "nothing",\n  "a \\"good\\" name" : "empty"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Bar*_*mar 7

不,没有限制。json.org包含 JSON 规范。对象中的键可以是任何字符串,并且 的产生式string表示它可以包含任何 Unicode 字符以及各种转义序列。

但是,字符串中反斜杠字符的规范规定,它后面只能跟形成指定转义序列的某些字符。\-不是这些转义序列之一,因此"/\- \" )"不是有效的 JSON 字符串,因此也不是对象中的有效键。应该写成"/- \" )". (许多语言允许您在任何字符之前放置反斜杠;如果它不开始转义序列,有些语言会将其视为文字反斜杠,而其他语言则将其视为冗余地将以下字符标记为文字 - JSON 通过禁止它来避免偏袒一方.)