对于JavaScript对象或JSON字符串,键名称中是否有禁用字符?或者需要转义的字符?更具体地说,我希望在键名中使用“$"、“-”和空格。
13z8s7eq1#
不可以。任何有效的字符串都是有效的键。它甚至可以有",只要你转义它:
"
{"The \"meaning\" of life":42}
在将这样的值加载到某些语言中时,可能会遇到一些困难,因为这些语言试图将键与对象字段名相关联,但我不知道有这样的情况。
nsc4cvqm2#
以下字符必须在JSON数据中转义以避免任何问题:
\
\n
\t
JSON Parser可以帮助您处理JSON。
vdzxcuhz3#
值得一提的是,虽然以数字开始的键是有效的,但它可能会导致一些意想不到的问题。示例:
var testObject = { "1tile": "test value" }; console.log(testObject.1tile); // fails, invalid syntax console.log(testObject["1tile"]; // workaround
xdyibdwo4#
必须避免使用Unicode代码点U+D800到U+DFFF:它们在Unicode中无效,因为它们是为UTF-16代理项对保留的。某些JSON编码器/解码器会将它们替换为U+FFFD。例如,请参见how the Go language and its JSON library deals with them。因此,避免单独使用“\uD800”到“\uDFFF”(不要使用代理对)。
goucqfw65#
JSON和JavaScript都允许任意字符串作为对象属性名,这取决于它们自己的语言定义。最新的JSON语言定义文档是RFC 8259(用于JSON)和ECMA-262(用于JavaScript)。键中需要转义的字符是语言中任何字符串中需要转义的字符。语言定义文档中也给出了这些字符。对于JSON,需要转义的字符是引号、反斜杠和控制字符。对于Javascript,需要转义的字符是与括起的引号匹配的引号字符(单或双)、反斜杠、回车和换行符。对于您的特定示例,所有“$"、“-”和空格都可以作为JSON和JavaScript对象的键,不需要转义。
根据RFC 8259,对用作对象名称的字符串值没有任何限制:一个对象结构被表示为一对大括号,它包围着零个或多个名称/值对(或成员)。名称是一个字符串。每个名称后面有一个冒号,将名称与值分隔开。一个逗号将值与后面的名称分隔开。对象中的名称应该是唯一的。
object = begin-object [ member *( value-separator member ) ] end-object member = string name-separator value
ECMA-262明确规定所有字符串都是有效的对象属性名称:
RFC 8259列出了JSON中必须转义的字符:所有Unicode字符都可以放在引号内,但必须转义的字符除外:引号、反斜线和控制字符(U+0000到U+001 F)。ECMA-262列出了JavaScript中必须转义的字符:字符串文字是用单引号或双引号括起来的0个或多个Unicode码位。[...]除了右引号码位U+005 C(REVERSE SOLIDUS)、U+000 D(CARRIAGE RETURN)和U+000 A(LINE FEED)之外,所有码位都可以按字面意思出现在字符串文字中。如果字符串用双引号括起来,则右引号代码点为";如果字符串用单引号括起来,则右引号代码点为'。
'
5条答案
按热度按时间13z8s7eq1#
不可以。任何有效的字符串都是有效的键。它甚至可以有
"
,只要你转义它:在将这样的值加载到某些语言中时,可能会遇到一些困难,因为这些语言试图将键与对象字段名相关联,但我不知道有这样的情况。
nsc4cvqm2#
以下字符必须在JSON数据中转义以避免任何问题:
"
(双引号)\
(反斜杠)\n
、\t
JSON Parser可以帮助您处理JSON。
vdzxcuhz3#
值得一提的是,虽然以数字开始的键是有效的,但它可能会导致一些意想不到的问题。
示例:
xdyibdwo4#
必须避免使用Unicode代码点U+D800到U+DFFF:它们在Unicode中无效,因为它们是为UTF-16代理项对保留的。某些JSON编码器/解码器会将它们替换为U+FFFD。例如,请参见how the Go language and its JSON library deals with them。
因此,避免单独使用“\uD800”到“\uDFFF”(不要使用代理对)。
goucqfw65#
JSON和JavaScript都允许任意字符串作为对象属性名,这取决于它们自己的语言定义。最新的JSON语言定义文档是RFC 8259(用于JSON)和ECMA-262(用于JavaScript)。
键中需要转义的字符是语言中任何字符串中需要转义的字符。语言定义文档中也给出了这些字符。对于JSON,需要转义的字符是引号、反斜杠和控制字符。对于Javascript,需要转义的字符是与括起的引号匹配的引号字符(单或双)、反斜杠、回车和换行符。
对于您的特定示例,所有“$"、“-”和空格都可以作为JSON和JavaScript对象的键,不需要转义。
对象属性名称
根据RFC 8259,对用作对象名称的字符串值没有任何限制:
一个对象结构被表示为一对大括号,它包围着零个或多个名称/值对(或成员)。名称是一个字符串。每个名称后面有一个冒号,将名称与值分隔开。一个逗号将值与后面的名称分隔开。对象中的名称应该是唯一的。
ECMA-262明确规定所有字符串都是有效的对象属性名称:
字符串转义
RFC 8259列出了JSON中必须转义的字符:
所有Unicode字符都可以放在引号内,但必须转义的字符除外:引号、反斜线和控制字符(U+0000到U+001 F)。
ECMA-262列出了JavaScript中必须转义的字符:
字符串文字是用单引号或双引号括起来的0个或多个Unicode码位。[...]除了右引号码位U+005 C(REVERSE SOLIDUS)、U+000 D(CARRIAGE RETURN)和U+000 A(LINE FEED)之外,所有码位都可以按字面意思出现在字符串文字中。
如果字符串用双引号括起来,则右引号代码点为
"
;如果字符串用单引号括起来,则右引号代码点为'
。