解析非标准格式的 JSON

2015-05-25 12:52:59 +08:00
 pysama

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

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

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

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

4364 次点击
所在节点    iDev
22 条回复
youxiachai
2015-05-25 12:56:16 +08:00
蛋碎..这个不叫json...是直接的js脚本..

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

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

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

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

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

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

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

© 2021 V2EX