V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DXDE443
V2EX  ›  Java

求教,这种序列化后的 json 字符串如何解析?

  •  1
     
  •   DXDE443 · 2018-07-10 14:31:13 +08:00 · 3322 次点击
    这是一个创建于 2088 天前的主题,其中的信息可能已经有所发展或是发生改变。
    String jsonStr = "{\"name\":\"Jack\",\"age\":18}";

    java 有没有类似于 js 的 JSON.parse 或者 eval 方法啊
    22 条回复    2018-07-10 20:01:06 +08:00
    DXDE443
        1
    DXDE443  
    OP
       2018-07-10 14:33:26 +08:00
    发错了,是 String jsonStr = "\"{\"name\":\"Jack\",\"age\":18}\""
    yukiww233
        2
    yukiww233  
       2018-07-10 14:37:10 +08:00
    new Gson().fromJson(String, Class<T>)
    InternetExplorer
        3
    InternetExplorer  
       2018-07-10 14:38:00 +08:00
    秘籍●多重字符之术
    =====================
    其实把 jsonStr 左右的两个引号去掉就是标准的 JSON 字符串了
    DXDE443
        4
    DXDE443  
    OP
       2018-07-10 14:38:36 +08:00
    还是不太对,应该是 String jsonStr = "\"{\\\"name\\\":\\\"Jack\\\",\\\"age\\\":18}\""
    luozic
        5
    luozic  
       2018-07-10 14:41:01 +08:00 via iPhone
    gson 等 java 里面的 json 工具库了解一下
    DXDE443
        6
    DXDE443  
    OP
       2018-07-10 14:43:22 +08:00
    不对不对,普通的解析我当然会,比如{"name" : 1},可我现在要解析的事"{\"name\" : 1}"这个样子的
    pipixia
        7
    pipixia  
       2018-07-10 14:43:23 +08:00
    replace 一下
    DXDE443
        8
    DXDE443  
    OP
       2018-07-10 14:46:49 +08:00
    @DXDE443
    @yukiww233
    @InternetExplorer
    @luozic
    @pipixia 能帮忙重新看看 4 楼和 7 楼吗,我 1 楼说错了不知道怎么改
    luozic
        9
    luozic  
       2018-07-10 14:51:12 +08:00 via iPhone
    反序列化再处理。
    execute
        10
    execute  
       2018-07-10 14:59:23 +08:00
    你可以试试用一下 com.alibaba.fastjson,我觉得挺好用的。有你正文里提到的 JSON.parse()方法
    InternetExplorer
        11
    InternetExplorer  
       2018-07-10 14:59:30 +08:00
    这样话就不是 JSON,让给你 JSON 的给你一个标准的 JSON
    DXDE443
        12
    DXDE443  
    OP
       2018-07-10 15:01:58 +08:00
    @InternetExplorer 我是调用客户系统的 webService,内容我做不了主啊
    kba977
        13
    kba977  
       2018-07-10 15:03:30 +08:00
    fastjson 直接 parse 一下就好了
    ![]( https://i.loli.net/2018/07/10/5b4459faec204.png)
    chocotan
        14
    chocotan  
       2018-07-10 15:05:10 +08:00
    StringEscapeUtils.unescapeJson
    然后去掉两头的"
    DXDE443
        15
    DXDE443  
    OP
       2018-07-10 15:05:55 +08:00
    我说的这个用 js 的话 JSON.parse(eval(jsonStr))然后就解决了,我不知道用 java 怎么处理
    kba977
        16
    kba977  
       2018-07-10 15:08:13 +08:00
    lululau
        17
    lululau  
       2018-07-10 15:13:25 +08:00
    SomeJSONParser.simeParseMethod(org.apache.commons.lang.StringEscapeUtils.unescapeJava(str))
    DXDE443
        18
    DXDE443  
    OP
       2018-07-10 15:13:44 +08:00
    刚刚试了下,parse 一次还是字符串,parse2 次就好了,看来是我想多了,谢大佬
    @kba977
    feiyuanqiu
        19
    feiyuanqiu  
       2018-07-10 15:22:46 +08:00
    反斜线是 escape character

    - php 可以用 stripcslashes 函数处理
    - java 可以用
    -- apache 的 commons-lang3 库的 StringEscapeUtils.unescapeJson() 方法
    -- 或者 commons-text 库的 StringEscapeUtils.unescapeJson() 方法处理
    DXDE443
        20
    DXDE443  
    OP
       2018-07-10 15:25:19 +08:00
    刚刚想试 StringEscapeUtils 但本地只有 commons-lang3 的库,过时了,我强迫症不想用,又没有外网下不了 commons-text,不过还是谢各位老哥建议,老哥们说话又好听我超喜欢在这里面的
    pipixia
        21
    pipixia  
       2018-07-10 15:27:13 +08:00
    <code>jsonStr.substring(jsonStr.indexOf("\"")+1,jsonStr.lastIndexOf("\"")).replace("\\","")</code>
    notreami
        22
    notreami  
       2018-07-10 20:01:06 +08:00
    比起怎么解析,为什么不从源头让 json 字符串规范呢??
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1180 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:07 · PVG 07:07 · LAX 16:07 · JFK 19:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.