JSON 密钥名称中哪些字符有效/无效?

IT技术 javascript json object key
2021-01-30 20:07:59

对于 JavaScript 对象或 JSON 字符串,键名中是否有任何禁用字符?或者需要转义的字符?

更具体地说,我想在键名中使用“$”、“-”和空格。

4个回答

否。任何有效的字符串都是有效的键。"只要你逃脱它,它甚至可以有

{"The \"meaning\" of life":42}

在将这些值加载到某些尝试将键与对象字段名称相关联的语言中时,您可能会遇到困难。然而,我不知道有任何这样的案例。

谢谢!还有其他需要转义的字符吗?像 : 或 ; ?
2021-03-13 20:07:59
恕我直言,这不是一个好的答案。哪些字符需要转义?哪些字符可以转义,但不必转义?
2021-03-15 20:07:59
谁能澄清这是否包括 Unicode 空字符(U+0000,UTF-8 中的纯“空字节”)等内容?两个json.org和链接官方/正式ECMA规范PDF似乎暗示着,是的,这些都是有效的JSON,甚至在他们的文字形式(不只是在\u four-hex-digits形式)。
2021-03-23 20:07:59
不是那些。任何需要在 JavaScript 中转义的内容通常都需要在 JSON 中进行。不过,最好在 json.org 上从马口中得到它。端到端阅读整个规范大约需要一分钟。
2021-04-01 20:07:59
@mtraceur 我也在想同样的事情。我在 chrome 的控制台中进行了测试,它不喜欢其中包含空终止符的键。puu.sh/zJMIS/3d15c6d8e5.png 规范中可能没有提到它,但不要指望解析器接受它。我认为最好避免使用任何 ascii 控制字符。
2021-04-05 20:07:59

必须在 JSON 数据中对以下字符进行转义以避免出现任何问题:

  • " (双引号)
  • \ (反斜杠)
  • 所有控制字符,如\n\t

JSON Parser可以帮助您处理 JSON。

@AlexKey 你说得对!Arun,您可以在jsonlint.com 上通过测试 JSON{ "singlequotetest": "something here isn\'t right"}{ "singlequotetest": "Fixing here what wasn't right"}
2021-03-12 20:07:59
{"🐶🔫": "not nice, but still valid json"}
2021-03-19 20:07:59
嗨 Arun,单引号不需要转义。事实上,转义它们会导致严格的 JSON 解析器抛出异常。请参阅json.org的字符串部分。当然,您需要在 JSON 字符串(但不是 JSON 本身)中转义它们。
2021-03-31 20:07:59
{ "*~@#$%^&*()_+=><?/": "是一个有效的 json" }
2021-04-04 20:07:59
@Arun Rana - 不用担心。
2021-04-08 20:07:59

值得一提的是,虽然以数字开头的键是有效的,但它可能会导致一些意想不到的问题。

例子:

var testObject = {
    "1tile": "test value"
};
console.log(testObject.1tile); // fails, invalid syntax
console.log(testObject["1tile"]; // workaround
我真的希望,在这个微软的 2017/18 时代,他们为自己造成的所有痛苦感到遗憾。
2021-03-13 20:07:59
这应该是最好的答案
2021-03-13 20:07:59
查看他们的指标 ID 参数:dev.applicationinsights.io/apiexplorer/... ---他们的 15 或 20 个字段在其 json 字段名称中有多个正斜杠。虽然 Karns 解决方案适用于特定领域,但我似乎无法让它适用于 1tile 的子领域。例如,后续的点对我来说返回 undefined 。
2021-03-24 20:07:59

必须避免 Unicode 代码点 U+D800 到 U+DFFF:它们在 Unicode无效,因为它们是为 UTF-16 代理对保留的。一些 JSON 编码器/解码器将用 U+FFFD 替换它们。例如,参见Go 语言及其 JSON 库如何处理它们

所以避免单独使用“\uD800”到“\uDFFF”(而不是代理对)。