根据JSON网站上的状态机图,只允许转义双引号字符,而不是单引号。 单引号字符不需要转义:

更新 - 有兴趣的人的更多信息:

Douglas Crockford没有具体说明为什么JSON规范不允许字符串中的转义单引号。 但是,在他在JavaScript:The Good Parts的附录E中讨论JSON时,他写道:

JSON的设计目标是最小化,可移植,文本和JavaScript的子集。 为了实现互操作,我们需要达成一致意见的越少,我们就越容易互操作。

所以也许他决定只允许使用双引号定义字符串,因为这是所有JSON实现必须达成一致的规则。 因此,字符串中的单引号字符不可能意外终止字符串,因为根据定义,字符串只能以双引号字符终止。 因此,不需要允许在正式规范中转义单引号字符。

进一步深入研究,Crockford的JSON for Java实现了org.json更加允许,允许使用单引号字符:

toString方法生成的文本严格遵循JSON语法规则。 构造者在他们接受的文本中更宽容:

...

字符串可以用'(单引号)引用。

这是由JSONTokener源代码确认的。 JSON方法接受转义的单引号字符,并将它们视为双引号字符:

public String nextString(char quote) throws JSONException {

char c;

StringBuffer sb = new StringBuffer();

for (;;) {

c = next();

switch (c) {

...

case '\\':

c = this.next();

switch (c) {

...

case '"':

case '\'':

case '\\':

case '/':

sb.append(c);

break;

...

该方法的顶部是一个内容丰富的评论:

正式的JSON格式不允许单引号中的字符串,但允许实现接受它们。

所以有些实现会接受单引号 - 但你不应该依赖它。 许多流行的实现在这方面都是相当严格的,并且将拒绝包含单引号字符串和/或转义单引号的JSON。

最后,为了将这个问题与原始问题联系起来,JSON首先尝试使用浏览器的本机JSON解析器或加载的库(如json2.js)(如果适用的话,这是jQuery逻辑所基于的库,如果JSON不是定义)。 因此jQuery只能像底层实现一样宽松:

parseJSON: function( data ) {

...

// Attempt to parse using the native JSON parser first

if ( window.JSON && window.JSON.parse ) {

return window.JSON.parse( data );

}

...

jQuery.error( "Invalid JSON: " + data );

},

据我所知,这些实现只遵循官方的JSON规范,不接受单引号,因此jQuery也没有。

jq输出html 单引号引号转义符,javascript - 由于JSON中的单引号转义,jQuery.parseJSON抛出“无效的JSON”错误...相关推荐

  1. jq输出html 单引号引号转义符,jQuery.parseJSON由于JSON中的单引号转义而引发“无效JSON”错误...

    小编典典 根据JSON网站上的状态机图,仅允许转义的双引号字符,不允许单引号. 更新-有兴趣者的更多信息: Douglas Crockford没有具体说明为什么JSON规范不允许字符串中的转义单引号. ...

  2. php语言中双引号的作用是什么,php中的单引号与双引号作用详解

    一.引号定义字符串 在Php中,通常一个字符串被定义在一对引号中,如: 'I am a string in single quotes' "I am a string in double q ...

  3. 常用HTML转义字符,html转义符,JavaScript转义符,html转义字符表,HTML语言特殊字符对照表(ISO Latin-1字符集)...

    HTML字符实体(Character Entities),转义字符串(Escape Sequence) 为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,> ...

  4. package.json 中的波浪号(~)和插入符号(^)有什么区别?

    问题描述: 在我升级到最新的稳定版 node 和 npm 后,我尝试了 npm install moment --save.它使用插入符号 ^ 前缀将条目保存在 package.json 中.以前,它 ...

  5. python中井号的作用_在python请求中处理井号(#)

    基本上,URL中的任何文本井号后的内容都是而不是发送到服务器.这适用于浏览器和requests.在 URL的格式表明type=#results部分实际上是一个查询参数.在 requests将自动编码查 ...

  6. oracle大于号怎么用,解决MyBatis的mapper中SQL小于号或大于号报错-tag name expected

    通常写SQL我们都会在Navicat里面写好条件测试没问题之后才会把SQL放到mapper里面,有次我在写Oracle的分页的时候因为用到了<=符号,在Navicat测试的时候是没问题的,但是放 ...

  7. c语言 号咋打,C语言C语言中的开头#号如何打? – 手机爱问

    2004-12-20 C语言中如何实现输入密码?(在输入时显示为*号.) 参考: 以下程序功能: 接受所有打印字符. 不接受控制字符,如Ctrl+ ,Alt,F1等. 可使用退格键删除以输入字符. 回 ...

  8. js追加html内容换行符,javascript – 从HTML中提取文本,同时保留块级元素换行符

    考虑: /** * Returns the style for a node. * * @param n The node to check. * @param p The property to r ...

  9. python字符串引号和转义_单引号字符串和转义符

    1.单引号字符串和转义符 字符串和数字一样都是值,可以直接使用,在python控制台中直接输入字符串,如"hello world",会按原样输出该字符串,只不过用单引号扩了起来 & ...

最新文章

  1. 低代码缺少的五大组件
  2. 爱立信:SDN/NFV助力面向5G以及工业互联网的ICT转型
  3. 深度学习如何入门?怎么入门机器/深度学习?
  4. @font-face详细用法+实例——Web响应式前端学习笔记
  5. 怎么调整矩形边框宽度_PKPM:梁刚度放大通过放大系数与矩形梁转T形梁的区别...
  6. native8081端口 react_教你轻松修改React Native的端口(如何同时运行多个React Native、8081端口占用问题)...
  7. 计算机学院网络与新媒体,网络与新媒体专业课程描述.PDF
  8. 把 mysql sql_mode 设置为严格模式的方法
  9. 【MIMO通信】基于matlab空时分组编码MIMO_OFDM通信系统仿真【含Matlab源码 663期】
  10. PDF查看器之pdfvuer
  11. 养猫日记之如何获得一只喵
  12. 关于TypeError: e[h] is not a function的问题
  13. Rust 最受喜爱却少有人用,Python 仅排第六,2021 全球开发者调查报告出炉
  14. Struts1.x 登录实验-无数据库版
  15. 《数据库系统概念》8-选择、投影等关系运算
  16. adb命令模拟Android电量
  17. 傻瓜攻略(九)——MATLAB实现简单的多元线性回归(以炼钢转炉炉龄问题为例)
  18. 线上虚拟创意展厅设计
  19. SQL去重的三种方法汇总 ​
  20. 手机硬件检测工具 AIDA64

热门文章

  1. Android学习笔记06---电话拨号器的制作:项目结构深化
  2. 1005 C语言控制输入1001-1004
  3. fastadmin model关联模型 关联查询问题
  4. 神奇的go语言(面向对象)
  5. 随想录(工作后的一点思考)
  6. 转正答辩ppt_如何顺利完成转正答辩?
  7. python测试嵌入式_用Python测试嵌入式系统的测试框架
  8. lightgbm过去版本安装包_Node版本管理利器-NVM,你们用过吗?
  9. 可自定义匹配规则查找控件_懂Excel轻松入门Python数据分析包pandas(二十八):二分法查找...
  10. if mybatis or test_真赞!IDEA中这么玩MyBatis,让编码速度飞起