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

Javascript JSON密钥名中哪些字符有效/无效?,javascript,json,object,key,Javascript,Json,Object,Key,对于JavaScript对象或JSON字符串,键名中是否有任何禁止的字符?还是需要转义的字符 更具体地说,我想在键名中使用“$”、“-”和空格。否。任何有效字符串都是有效键。它甚至可以有“,只要您转义它: {"The \"meaning\" of life":42} 您可能会在将这些值加载到某些语言中时遇到困难,这些语言试图将键与对象字段名关联。但是,我不知道有任何此类情况。在JSON数据中必须转义以下字符以避免任何问题: “(双引号) \(反斜杠) 所有控制字符,如\n,\t 可以帮助您

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


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

否。任何有效字符串都是有效键。它甚至可以有
,只要您转义它:

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

您可能会在将这些值加载到某些语言中时遇到困难,这些语言试图将键与对象字段名关联。但是,我不知道有任何此类情况。

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

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

可以帮助您处理JSON。

必须避免使用Unicode代码点U+D800到U+DFFF:它们使用Unicode,因为它们是为UTF-16代理项对保留的。一些JSON编码器/解码器将用U+FFFD替换它们。例如,见


因此,避免单独使用“\uD800”到“\uDFFF”(不在代理项对中)。

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

例如:

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

我认为这个答案部分与你的编码方式有关。例如,UTF8与ANSI允许使用不同的字符。您可以使用
obj['whatever']
符号在JS中使用您想要的任何“键”。但是只有常规的字母数字键才能用于
obj。无论什么版本。@invalidsyntax:JSON定义为Unicode。此外,ANSI不是一种编码,它是一个字符集,因此比较应该是Unicode与ANSI,而不是UTF-8-vs-ANSI。以前的讨论是,ASCII(人们通常称之为ANSI)是一种编码,除此之外,它还定义了一个字符集。Thx!还有其他需要转义的字符吗?比如:或者?不是那些。JavaScript中需要转义的内容通常需要JSON中的转义。不过,最好还是从json.org上从马嘴里得到它。端到端阅读整个规范大约需要一分钟。这不是一个好答案。哪些类型的字符需要转义?哪些字符可以转义,但不必转义?有人能澄清这是否包括Unicode空字符(U+0000,UTF-8中的普通“空字节”)等吗?两者和链接的官方/正式ECMA规范PDF似乎都暗示,是的,它们在JSON中是有效的,即使是在它们的文字形式中(不仅仅是在
\u四个十六进制数字
形式中)。@mtraceur我也在想同样的事情。我在chrome的控制台上进行了测试,它不喜欢带有空终止符的密钥。规范中可能没有提到它,但不要期望解析器接受它。我认为最好避免任何ascii控制字符。嗨,阿伦,单引号不需要转义。实际上,转义它们将导致严格的JSON解析器抛出异常。当然,请参考字符串部分,但是在JSON字符串中(而不是JSON本身)需要转义它们。@AlexKey你完全正确!Arun,您可以通过测试JSON
{“singlequotetest”:“这里有些不对劲”}
{“singlequotetest”:“修复这里的不对劲”}
@Arun Rana-不用担心。{“*~@$%^&*()”=>
{我真的希望,在这个2017/18年的微软时代,他们对自己所造成的痛苦感到遗憾。看看他们的度量ID参数:--15或20个字段的json字段名中有多个正斜杠。虽然Karns解决方案适用于特定字段,但我似乎无法让它适用于1个文件的子字段。例如,后续的点返回未定义。这应该是最好的答案