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

小编典典

根据JSON网站上的状态机图,仅允许转义的双引号字符,不允许单引号。

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

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

JSON的设计目标是最小化,可移植,文本化以及JavaScript的子集。我们需要达成共识以进行互操作的次数越少,我们就越容易进行互操作。

因此,也许他决定只允许使用双引号定义字符串,因为这是所有JSON实现都必须同意的较少规则。结果,字符串中的单引号字符不可能偶然终止该字符串,因为根据定义,字符串只能以双引号字符终止。因此,无需在正式规范中转义单引号字符。

深入研究一下,Crockford的JSON for Java的org.json实现更为允许,并且允许单引号字符:

toString方法产生的文本严格遵守JSON语法规则。构造函数在接受的文本中更为宽容:

字符串可以用’(单引号)引起来。

这由JSONTokener源代码确认。该nextString方法接受转义的单引号字符,并将其与双引号字符一样对待:

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。

最后,将其与原始问题联系起来,jQuery.parseJSON首先尝试使用浏览器的本机JSON解析器或适用的已加载库(例如json2.js)(附带说明的是,如果JSON未定义jQuery逻辑,则基于该库) 。因此,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也是如此。

2020-12-05

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值