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

Chr*_*phe 132 javascript json key object

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

更具体地说,我想在键名中使用"$"," - "和空格.

Mar*_*tos 152

不.任何有效字符串都是有效密钥.它甚至可以"随你逃脱它:

{"The \"meaning\" of life":42}
Run Code Online (Sandbox Code Playgroud)

您可能会遇到将这些值加载到某些语言中的困难,这些语言尝试将键与对象字段名称相关联.但是,我不知道任何此类案件.

  • 不是那些.无论JavaScript中出现什么需求,通常都需要JSON.不过,在json.org上最好从马的嘴里拿出来.端到端阅读整个规范大约需要一分钟. (10认同)
  • 恕我直言,这不是一个好答案。哪种字符需要转义?哪些字符可以转义,但不必转义? (3认同)
  • 谁能澄清这是否包括 Unicode 空字符(U+0000,UTF-8 中的纯“空字节”)等内容?http://json.org 和链接的官方/正式 ECMA 规范 PDF 似乎暗示是的,这些在 JSON 中是有效的,即使是它们的字面形式(不仅仅是“\u 四十六进制数字”形式) )。 (2认同)

Aru*_*ana 50

必须在JSON数据中转义以下字符以避免任何问题

'单引号

"引用

\反斜杠

所有控制字符,如\n\t

JSON Parser可以帮助您处理JSON.

编辑: 这是一个替代JSON解析器,因为OP的链接已经死了

  • `{"":"不好,但仍然有效的json"}` (43认同)
  • 嗨Arun,单引号不需要转义.事实上,转义它们会导致严格的JSON解析器抛出异常.请参阅http://www.json.org的字符串部分.然而,当您在JSON字符串内部(但不是JSON本身)时,您将需要转义它们. (5认同)
  • @AlexKey,你完全正确!Arun,你可以在[jsonlint.com](http://jsonlint.com/)上通过测试JSON`{"singlequotetest"来检查这个:"这里的东西是不对的"}````````singlequotetest": "修复这里不对的事情"}` (5认同)
  • {"*〜@#$%^&*()_ + => <?/":"是一个有效的json"} (3认同)
  • 链接已经死了. (3认同)

kar*_*rns 9

值得一提的是,虽然使用数字启动密钥是有效的,但可能会导致一些意外问题.

IE:

var testObject = {
    "1tile": "test value"
};
console.log(testObject.1tile); // fails, invalid syntax
console.log(testObject["1tile"]; // workaround
Run Code Online (Sandbox Code Playgroud)

  • 我真的希望,在2017/18岁的微软时代,他们对所遭受的所有痛苦感到遗憾. (6认同)
  • −1。这不是问题的答案。充其量,它应该是一条评论。JavaScript 标识符的语法是另一个话题。 (3认同)

dol*_*men 7

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

因此,单独避免"\ uD800"到"\ uDFFF"(不在代理对中).