在JSON键名中哪些字符是有效的/无效的?

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

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

249532 次浏览

不。任何有效的字符串都是有效的键。它甚至可以有",只要你转义它:

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

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

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

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

JSON解析器可以帮助你处理JSON。

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

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

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

例子:

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