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

请教一下 kotlin json 序列化及配合 data class 的正确姿势

  •  
  •   yazinnnn · 2020-08-06 16:21:15 +08:00 · 5942 次点击
    这是一个创建于 1600 天前的主题,其中的信息可能已经有所发展或是发生改变。

    jackson 可以直接 decode jsonString 成 Any 需要自己强转成 jsonObject 或者 jsonArray 可以转成普通 class 实体,不能转成 data class

    Fastjson 情况类似

    网上搜了一下 jackson 需要引入 kotlin module 和大量注解配合才能使用 data class

    请问有啥方便的轮子可以用么?

    12 条回复    2021-11-20 19:01:39 +08:00
    sospopo101343793
        1
    sospopo101343793  
       2020-08-06 16:41:53 +08:00
    使用 gson,暂时没遇到啥问题
    lianyue13
        2
    lianyue13  
       2020-08-06 16:48:58 +08:00 via Android
    Kotlin serialization 或者 moshi
    wahahaha18
        3
    wahahaha18  
       2020-08-06 16:52:51 +08:00
    android studio 上有一个 json to kotlin class 的插件,你可以搜一搜类似插件试一试
    whyrookie
        4
    whyrookie  
       2020-08-06 16:55:41 +08:00
    同一楼,用的 Gson,没啥问题
    chendy
        5
    chendy  
       2020-08-06 18:34:59 +08:00
    jackson + kotlin module 就完事了,注解都是别的故事了
    ijaysdev
        6
    ijaysdev  
       2020-08-06 18:42:30 +08:00
    可以用 Gson 或者 Moshi,Jake Wharton 比较推荐使用 Moshi
    KingOfUSA
        7
    KingOfUSA  
       2020-08-07 00:08:09 +08:00
    compile "com.fasterxml.jackson.module:jackson-module-kotlin"
    lhtdege
        8
    lhtdege  
       2020-08-07 01:17:18 +08:00
    moshi +1
    moshi 的实现比较优雅一些,速度比 Gson 快,底层使用的是 Okio
    jeremaihloo
        9
    jeremaihloo  
       2020-08-07 01:43:57 +08:00
    moshi 就是为 Kotlin 而生的
    bluebonnet27
        10
    bluebonnet27  
       2020-12-24 09:24:01 +08:00
    我用的 GSON,然后 data class 手打的… …
    ZSpirytus
        11
    ZSpirytus  
       2021-11-20 18:59:34 +08:00 via Android
    可以使用 Gson 。
    如果担心性能问题,可以使用我写的注解处理器 :) https://github.com/zkw012300/GsonBooster
    (后面会迁移到 KSP ,编译速度更快,限制更少)
    ZSpirytus
        12
    ZSpirytus  
       2021-11-20 19:01:39 +08:00 via Android
    @ZSpirytus 还有就是,gson 配合 data class 的话,需要有无参构造方法(也就是所有的 primary constructor 字段都需要有默认值),否则 gson 会使用 unsafe 来构造一个实例,会导致一些潜在的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1301 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:38 · PVG 01:38 · LAX 09:38 · JFK 12:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.