获取到网页script里面的JSON文本,请问如何不使用eval转换为JSON?
发布于 1个月前 作者 youqingkui 445 次浏览 来自 问答

获取到了网页中script里面的文本,是一个JSON对象,但是使用JSON.parse解析的话会报错。使用eval 可以解析数据,但是这样是否不太安全。有什么比较好的方法吗?谢谢!

16 回复

@haozxuan 请问下如何使用啊?

@youqingkui 百度下,json.pase 就有大神标注坑,当然也有解决方案。

不要用eval,先找到json.parse 解析失败的原因啊。

亲, 把文本和报错的信息贴出来

用JSON.parse的话一定要保证是严格的json格式,属性和属性值的双引号不能缺,eval则不需要严格的json格式

@turristan

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。 js.jpg

@turristan 有什么办法可以解析吗?

兄弟,不会折腾正则表达式? json.png

@youqingkui 意思你让改服务器返回。用toJson之类的方法。就是严格模式的了

jsonlint 一下,就知道错在哪里了。 property name 要双引号啊

JSON.parse 需要是严格的 { } 格式吧,你的数据应该是

' { “songs” = [ { index : "1", title : "此时此刻", hot : "22026", url: “/share/songRedict.do?id=4616853720955750635&source=0&token=c0fd73993e93ca35ff337538a5584c1f” } ]}’

这个样子?

@youqingkui 你这个应该是数组吧,你如果JSON.parse(songs[0])应该就不会有问题了,不过这样的话需要解析成数组长度为个数的json,不知道是不是你想要的了。

@TianZong48 还要在后面添加{}

@youqingkui 现在获取到的songs是一个字符串,不是数组,没有办法按照数组操作。

回到顶部