哪些字符在JSON键名中有效/无效
Which characters are valid/invalid in a JSON key name?
对于JavaScript对象或JSON字符串,键名中是否有任何禁止字符?或者需要转义的字符?
更具体地说,我想在键名中使用"$","-"和空格
No。任何有效的字符串都是有效的键。它甚至可以有"
,只要你转义它:
{"The '"meaning'" of life":42}
您可能会在将这些值加载到某些语言时遇到困难,因为这些语言试图将键与对象字段名关联起来。然而,我不知道有这样的情况。
以下字符必须在JSON数据中转义以避免任何问题:
-
"
(双引号) -
'
(斜杠) - 所有控制字符如
'n
,'t
JSON Parser可以帮助你处理JSON
值得一提的是,虽然用数字开始键是有效的,但它可能会导致一些意想不到的问题。
的例子:
var testObject = {
"1tile": "test value"
};
console.log(testObject.1tile); // fails, invalid syntax
console.log(testObject["1tile"]; // workaround
Unicode码点U+D800到U+DFFF必须避免:它们在Unicode中无效,因为它们是为UTF-16代理对保留的。一些JSON编码器/解码器将用U+FFFD代替它们。请看Go语言和它的JSON库如何处理它们的例子。
因此,避免只使用"'uD800"到"'uDFFF"(而不是在代理符对中)。
JSON和JavaScript都允许任意字符串作为对象属性名,根据它们自己的语言定义。最新的JSON语言定义文档是JSON的RFC 8259和JavaScript的ECMA-262。
键中需要转义的字符是在该语言的任何字符串中需要转义的字符。这些也在语言定义文档中给出。对于JSON,需要转义的字符是引号、反斜杠和控制字符。对于Javascript,需要转义的字符是与括引号(单引号或双引号)匹配的引号字符、反斜杠、回车符和换行符。
对于您的特定示例,所有"$", "-"和空格都可以作为JSON &JavaScript对象,不需要转义。
对象属性名
根据RFC 8259,对用作JSON对象名称的字符串的值没有限制:
对象结构用一对花括号表示包含零个或多个名称/值对(或成员)。名字就是字符串。每个名称后面都有一个冒号,用来分隔名称从值。一个值与后面的值之间用一个逗号分隔名字对象内的名称必须是唯一的。
object = begin-object [ member *( value-separator member ) ] end-object member = string name-separator value
关于JavaScript, ECMA-262明确声明所有字符串都是有效的对象属性名:
属性键值要么是ECMAScript String值,要么是Symbol值。所有字符串和符号值,包括空字符串,都可以作为属性键有效。属性名是一个String值的属性键。
字符串转义
RFC 8259列出了JSON中必须转义的字符:
所有Unicode字符都可以放在引号,必须转义的字符除外:引号,反向立体线,以及控制字符(U+0000)通过U + 001 f)。
ECMA-262列出了JavaScript中必须转义的字符:
字符串字面值是用单引号或双引号括起来的0个或多个Unicode码点。[…]所有代码点都可以出现在字符串字面量中,除了结束引号代码点,U+005C (REVERSE SOLIDUS), U+000D(回车)和U+000A(换行)。
如果字符串用双引号括起来,则结束引号代码点为"
,如果字符串用单引号括起来,则结束引号代码点为'
。
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 滚动在Chrome中有效,但在Firefox或IE中无效
- 文本字段显示它是有效的,即使它在ExtJS中是无效的
- JS代码在jsbin中有效,在jsfiddle或Chrome/Safari中无效
- 为什么这个按钮在IE中有效,但在Firefox中无效
- Joomla模式框弹出代码在文章中有效,但在代码中无效
- jQuery"焦点”;在一个实例中有效,但在其他实例中无效
- javascript/jQuery:在title中添加换行符——在IE9中有效,但在IE8中无效
- 数组在手动写入时有效,但从文本文件加载时无效
- parseJSON在一种情况下有效,而在另一种情况中无效
- 为什么视频不显示在有角度的灯箱中?图像有效,但视频无效;t
- MagnificPopupLightbox在RubyonRails开发中有效,但在部署到Heroku时无效
- 获取所选选项的Javascript在Webkit/FF中有效,但在IE中无效
- @媒体查询在桌面浏览器中有效,而在移动浏览器中无效
- 为什么form.submit()在使用jQuery时有效,而在使用普通JS时无效
- 转换链接在jsfiddle中有效,但在我的浏览器上无效
- 指定的侧边栏广播器无效 -- 有效的侧边栏广播器是什么样子的
- MySql数据库INSERT操作在硬盘(localhost)上有效,但在Internet上托管时无效
- 哪些字符在JSON键名中有效/无效
- 角度材料设计输入有效/无效