获取到了网页中script
里面的文本,是一个JSON
对象,但是使用JSON.parse
解析的话会报错。使用eval
可以解析数据,但是这样是否不太安全。有什么比较好的方法吗?谢谢!
http://www.JSON.org/json2.js 算是一种解决方案吧
@haozxuan 请问下如何使用啊?
@youqingkui 百度下,json.pase 就有大神标注坑,当然也有解决方案。
不要用eval,先找到json.parse 解析失败的原因啊。
亲, 把文本和报错的信息贴出来
用JSON.parse的话一定要保证是严格的json格式,属性和属性值的双引号不能缺,eval则不需要严格的json格式
a = $('script:contains("songs")').text()
"
songs = [
{
index : "1",
title : "此时此刻",
hot : "22026",
url: "/share/songRedict.do?id=4616853720955750635&source=0&token=c0fd73993e93ca35ff337538a5584c1f"
}
,
{
index : "2",
title : "爱情",
hot : "18526",
url: "/share/songRedict.do?id=4616853720955750636&source=0&token=659fff03d7dffa3d0f3bba5441c7c9fd"
}
,
{
index : "3",
title : "逍遥行",
hot : "18533",
url: "/share/songRedict.do?id=4616853720955750637&source=0&token=e567ffbf67dd6452c2d30f1df1229e04"
}
,
{
index : "4",
title : "灵岩",
hot : "6875",
url: "/share/songRedict.do?id=4616853720955750638&source=0&token=4f982339445e2597a2db00d9fb7be2e5"
}
,
{
index : "5",
title : "空谷幽兰",
hot : "47523",
url: "/share/songRedict.do?id=4616853720955750639&source=0&token=a659ed0256888209559b4592041d1e58"
}
,
{
index : "6",
title : "出离",
hot : "3961",
url: "/share/songRedict.do?id=4616853720955750640&source=0&token=5c47470f6b5be9217658a5cc0b08d296"
}
,
{
index : "7",
title : "喜悦",
hot : "25604",
url: "/share/songRedict.do?id=4616853720955750641&source=0&token=8af31680e95dc1e80c1e118781bdbe56"
}
,
{
index : "8",
title : "心愿",
hot : "4971",
url: "/share/songRedict.do?id=4616853720955750642&source=0&token=583b08ea26f3e2fbcb09ed1516508c94"
}
,
{
index : "9",
title : "救赎之旅",
hot : "16890",
url: "/share/songRedict.do?id=4616853720955750643&source=0&token=f9b10c720f70f4cb6a5ecfa9dae3bd30"
}
,
{
index : "10",
title : "世外桃源",
hot : "23628",
url: "/share/songRedict.do?id=4616853720955750644&source=0&token=aefb7e82a9638f106a3b555c47301623"
}
];
"
JSON.parse(a)
(program):2 Uncaught SyntaxError: Unexpected token s
at Object.parse (native)
at <anonymous>:2:6
at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)
“songs = [obj1, obj2, …]” 是普通的js赋值语句, 不是json。
@turristan 有什么办法可以解析吗?
兄弟,不会折腾正则表达式?
@youqingkui 意思你让改服务器返回。用toJson之类的方法。就是严格模式的了
jsonlint 一下,就知道错在哪里了。 property name 要双引号啊
@youqingkui 你这个应该是数组吧,你如果JSON.parse(songs[0])应该就不会有问题了,不过这样的话需要解析成数组长度为个数的json,不知道是不是你想要的了。
@TianZong48 还要在后面添加{}
?
@youqingkui 现在获取到的songs是一个字符串,不是数组,没有办法按照数组操作。