解析非标准格式的 JSON

2015 年 5 月 25 日
 pysama

我拿到的json本质是一个JS的赋值语句,如:

var data = {
    "key": "value"
};

对于这种格式,是没办法直接使用iOS内置的方法来解析的。我的解决方案是:取回数据后,先转为NSString格式,然后通过字符串方法去掉var data =和尾部的;,再转为NSData格式,再用json
序列化方法转换出来。

如果有更好的方案,也希望有同学能分享出来学习哈。

5250 次点击
所在节点    iDev
22 条回复
youxiachai
2015 年 5 月 25 日
蛋碎..这个不叫json...是直接的js脚本..

如果是抓网页的话,那就无解了..(如果可能倒是可以eval)取值

如果是后台返回的..明显那个人的实现有问题..
publicID001
2015 年 5 月 25 日
JavaScriptCore
inmyfree
2015 年 5 月 25 日
@youxiachai 洗洗睡吧
jun4rui
2015 年 5 月 25 日
这个接口是谁写的?这不是json啊。
tuoxie007
2015 年 5 月 25 日
想办法执行一下js脚本吧,比如比较土的办法,用webview
pysama
2015 年 5 月 25 日
@youxiachai
@jun4rui
这是N年前的啦,估计做这个的人对前端不是很熟悉吧。。
tinyhill
2015 年 5 月 25 日
js 不是可以直接执行吗?再不济用 eval 啊
yangxiongguo
2015 年 5 月 25 日
N 年前的果然屌,返回后直接执行。
lixia625
2015 年 5 月 25 日
saber000
2015 年 5 月 25 日
正则贪心匹配花括号,这样:
\{.*\}
luciferlu
2015 年 5 月 25 日
可以算是JSONP吧,http://en.wikipedia.org/wiki/JSONP
pysama
2015 年 5 月 25 日
@saber000 恩,这样也是可以,但还要考虑到最外层是array的情况。

var x = [{key:value}] ;
pysama
2015 年 5 月 25 日
@luciferlu 是的,JSONP也是广泛使用的跨域解决方案。
learnshare
2015 年 5 月 25 日
这是 JavaScript,可以 eval(),不过不建议这么干
WildCat
2015 年 5 月 25 日
String 替换是最好的方式了吧,eval() 很浪费性能,还得初始化个 JavaScriptCore
msg7086
2015 年 5 月 25 日
找到第一个等号和最后一个分号,然后strip掉嘛
pysama
2015 年 5 月 25 日
集思广益,一起谢过LS的各位同仁指点哈
bombless
2015 年 5 月 25 日
你可以爬ast啊
这种工具我记得有一些不错的
xi_lin
2015 年 5 月 25 日
@luciferlu JSONP不是这样玩的吧…
pysama
2015 年 5 月 25 日
@xi_lin 恩,不是var x = {}。 是 callback(data)哈,直接把callbackFunctionName传过去了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/193536

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX