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

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


不。任何有效的字符串都是有效的键。它甚至可以有“as long as you escape It”:

{"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