请问jsonJSON.parse()中双引号怎么解决

aqgsh 2014-12-30 04:12:38
从后台返回数据是 json类型的,使用的是 Newtonsoft.Json中的JsonConvert.SerializeObject()这个方法。如下所示:

var s = '[{"a":"aa","b":"bbb"},{"a1":"<a href=\"#\">dd</a>"}]';

注意:a1值中的双引号已经加上了转义符。但是在使用 JSON.parse(s);时,会报错,错误如下:
SyntaxError: JSON.parse: expected ',' or '}' after property value in object at line 1 column 39 of the JSON data

测试发现,如果把<a href=\"#\">dd</a>改成以下两种方法,都可以解析成功

<a href=\'#\'>dd</a>
<a href=\\"#\\">dd</a>


请问这个怎么处理?先答对先给分哦!~

--------------------------------------------------------------------------------
很奇怪的是,var s = '[{"a":"aa","b":"bbb"},{"a1":"<a href=\"#\">dd</a>"}]';这个字符串,在一些 在线json解析的网站上,是可以解析成功的。

求大神解答
...全文
2722 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 社区高级成员 T9 2015-01-01
  • 打赏
  • 举报
回复
换个思路吧—— 既然用了json, 就不要返回html了
KK3K2005 2014-12-31
  • 打赏
  • 举报
回复
JSON.parse('[{"a":"aa","b":"bbb"},{"a1":"<a href=\\\"#\\\">dd</a>"}]')
lyc305213781 2014-12-31
  • 打赏
  • 举报
回复
或者你只是想给A变现的text赋值的话,没必要吧整个A标签放到json串中,只把A标签的text放到json串中,等你解析的时候,解析到A标签中就可以了,想一个变通的办法去解决就可以了嘛
lyc305213781 2014-12-31
  • 打赏
  • 举报
回复
小哥不要太纠结,我来告诉你,在html中属性用单引号来包裹也是可以的,所以可以钻个空子 [{"a":"aa","b":"bbb"},{"a1":"<a href='#'>dd</a>"}] 这样不就可以了吗
xuzuning 2014-12-30
  • 打赏
  • 举报
回复
var s = '[{"a":"aa","b":"bbb"},{"a1":"<a href=\\"#\\">dd</a>"}]';
alert(s);
o = JSON.parse(s.replace(/\\\"/, '\\"'));
alert(JSON.stringify(o));
alert(o[1].a1)
挥不去的思念 2014-12-30
  • 打赏
  • 举报
回复
这是返回的数据:
[{"a":"aa","b":"bbb"},{"a1":"<a href="#">dd</a>"}]
从数据里面看,使用eval时 在a标签中 [{"a":"aa","b":"bbb"},{"a1":"<a href="就这样断开了。 所以要使用转义,但是如果直接使用 \" 转义后也会变成 单引号 " 在使用eval解析时还是会出错。 你可以先把 “ 去掉。然后 eval
aqgsh 2014-12-30
  • 打赏
  • 举报
回复
难道没有人知道?
functionsub 2014-12-30
  • 打赏
  • 举报
回复
引用 7 楼 aqgsh 的回复:
[quote=引用 5 楼 functionsub 的回复:]
var s = '[{"a":"aa","b":"bbb"},{"a1":"<a href=\\\"#\\\">dd</a>"}]';
JSON.parse(s)

你不仅要对"转移,还要对\转移,所以要3个\
关键是这个值是后台返回的。 使用Newtonsoft.Json中的JsonConvert.SerializeObject()方法的。我不可能去修改。 再说var s = '[{"a":"aa","b":"bbb"},{"a1":"<a href=\"#\">dd</a>"}]';这个在一些在线解析json的网站上,是可以正常解析的。说明格式是没有错误的[/quote] 那你就不要在外面再加单引号了,直接var s = <%=aaa%>;这个s就已经是json了。 另外,你说的[{"a":"aa","b":"bbb"},{"a1":"<a href=\"#\">dd</a>"}]在网上上解析是可以的,那是因为你输入了这样的文字进去,他取那个输入框的value的时候,浏览器会自行把\加上转义符。 只是你看value的时候是一个字符串,字符串里面是看不见转义符的。
aqgsh 2014-12-30
  • 打赏
  • 举报
回复
引用 5 楼 functionsub 的回复:
var s = '[{"a":"aa","b":"bbb"},{"a1":"<a href=\\\"#\\\">dd</a>"}]';
JSON.parse(s)

你不仅要对"转移,还要对\转移,所以要3个\
关键是这个值是后台返回的。 使用Newtonsoft.Json中的JsonConvert.SerializeObject()方法的。我不可能去修改。 再说var s = '[{"a":"aa","b":"bbb"},{"a1":"<a href=\"#\">dd</a>"}]';这个在一些在线解析json的网站上,是可以正常解析的。说明格式是没有错误的
slwsss 2014-12-30
  • 打赏
  • 举报
回复
引用 4 楼 aqgsh 的回复:
你给的就是数组啊
functionsub 2014-12-30
  • 打赏
  • 举报
回复
var s = '[{"a":"aa","b":"bbb"},{"a1":"<a href=\\\"#\\\">dd</a>"}]';
JSON.parse(s)

你不仅要对"转移,还要对\转移,所以要3个\
aqgsh 2014-12-30
  • 打赏
  • 举报
回复
引用 3 楼 slwsss 的回复:
s是字符串 值为"[{"a":"aa","b":"bbb"},{"a1":"<a href="#">dd</a>"}]" 这串json格式是错误的 序列化json的时前后不要加引号 直接用 var s=[{"a":"aa","b":"bbb"},{"a1":"<a href=\"#\">dd</a>"}]
你这样是一个数组对象了啊。
slwsss 2014-12-30
  • 打赏
  • 举报
回复
s是字符串 值为"[{"a":"aa","b":"bbb"},{"a1":"<a href="#">dd</a>"}]" 这串json格式是错误的 序列化json的时前后不要加引号 直接用 var s=[{"a":"aa","b":"bbb"},{"a1":"<a href=\"#\">dd</a>"}]
aqgsh 2014-12-30
  • 打赏
  • 举报
回复
引用 1 楼 slwsss 的回复:
alert(s)看下值
我这个例子,s已经直接赋值了,还要alert干什么?
slwsss 2014-12-30
  • 打赏
  • 举报
回复
alert(s)看下值

87,919

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧