V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
pysama
V2EX  ›  iDev

解析非标准格式的 JSON

  •  
  •   pysama · 2015-05-25 12:52:59 +08:00 · 4364 次点击
    这是一个创建于 3499 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    22 条回复    2015-05-26 16:16:48 +08:00
    youxiachai
        1
    youxiachai  
       2015-05-25 12:56:16 +08:00
    蛋碎..这个不叫json...是直接的js脚本..

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

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

    var x = [{key:value}] ;
    pysama
        13
    pysama  
    OP
       2015-05-25 21:16:51 +08:00
    @luciferlu 是的,JSONP也是广泛使用的跨域解决方案。
    learnshare
        14
    learnshare  
       2015-05-25 21:20:28 +08:00
    这是 JavaScript,可以 eval(),不过不建议这么干
    WildCat
        15
    WildCat  
       2015-05-25 21:43:25 +08:00
    String 替换是最好的方式了吧,eval() 很浪费性能,还得初始化个 JavaScriptCore
    msg7086
        16
    msg7086  
       2015-05-25 21:45:53 +08:00
    找到第一个等号和最后一个分号,然后strip掉嘛
    pysama
        17
    pysama  
    OP
       2015-05-25 22:25:55 +08:00
    集思广益,一起谢过LS的各位同仁指点哈
    bombless
        18
    bombless  
       2015-05-25 22:29:04 +08:00
    你可以爬ast啊
    这种工具我记得有一些不错的
    xi_lin
        19
    xi_lin  
       2015-05-25 22:52:30 +08:00 via iPhone
    @luciferlu JSONP不是这样玩的吧…
    pysama
        20
    pysama  
    OP
       2015-05-25 23:00:42 +08:00
    @xi_lin 恩,不是var x = {}。 是 callback(data)哈,直接把callbackFunctionName传过去了。
    typcn
        21
    typcn  
       2015-05-25 23:25:18 +08:00
    如果你确定那个 var data 不会变,这就是最好/最快的办法了。
    如果可能变的话,就放到 webview 里面运行一下
    rcmerci
        22
    rcmerci  
       2015-05-26 16:16:48 +08:00
    我擦。。这是json吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2852 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 00:06 · PVG 08:06 · LAX 16:06 · JFK 19:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.