V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
moverinfo
V2EX  ›  程序员

发现大多数的 Java 项目, JSON 已经是一个十分常用的格式。写了一个十分精简的解析器。

  •  
  •   moverinfo · 1 天前 via iPhone · 5849 次点击

    本想设计的复杂一点,但是,我觉得满足低于 20K 大小的 JSON 串,基本就足够了。另外,大的 JSON 十分少见,哪怕出现这种情况,这个库的性能也还不错。所以,根本没必要搞一个十分巨大的解析器。

    https://github.com/tinystruct/tinystruct/blob/master/src/main/java/org/tinystruct/data/component/Builder.java

    38 条回复    2025-09-10 18:58:34 +08:00
    bobox
        1
    bobox  
       1 天前
    json 反序列化可不是闹着玩的,稍不小心就是远程漏洞。
    stinkytofux
        2
    stinkytofux  
       1 天前
    阿里的 FastJson 都迭代过多少版本了, 曾经爆出了无数的高危漏洞, 这玩意可不是那么好写的, 性能得排在安全后面.
    werls
        3
    werls  
       1 天前   ❤️ 1
    为什么不用 Gson ,还有发错节点了,应该放在推广节点。
    wxw752
        4
    wxw752  
       1 天前   ❤️ 1
    都用 Java 了,我还怕包大吗
    HuKing
        5
    HuKing  
       1 天前
    FastJson2 已经很好用了
    chendy
        6
    chendy  
       1 天前   ❤️ 16
    看得出来楼主很想推广 tinystruct ,但是我们写 Java 的最不缺的就是这类东西
    好不好,可能好
    用不用,不可能用
    wangtian2020
        7
    wangtian2020  
       1 天前   ❤️ 2
    每次看到这种东西只会让我觉得 2025 年了 Java 基础设施还没建好
    y1y1
        8
    y1y1  
       1 天前
    今夕是何年
    spike0100
        9
    spike0100  
       1 天前
    fastjson 、jackson 包那么大是有原因的。
    NotFoundEgg
        10
    NotFoundEgg  
       1 天前
    json 这种真没人敢乱用,我们之前用了几年 fastjson ,最近改成了 jackson ,改得吐血
    layxy
        11
    layxy  
       1 天前
    目前主流应该是 jackson,国内 fastjson 比较多一些,只不过 fastjson 漏洞太多了, fastjson2 个人项目使用了,但是公司现在不推荐使用 fastjson 了,我感觉 fastjson 的使用方式更方便一些
    twofox
        12
    twofox  
       1 天前
    我放着 jackjson 不用是为了什么呢
    a1274598858
        13
    a1274598858  
       1 天前
    @twofox #12 没苦硬吃😂
    happypy1
        14
    happypy1  
       1 天前
    2025 年了,还有人在重复造 json 反序列化的轮子?
    0312birdzhang
        15
    0312birdzhang  
       1 天前
    Java 世纪难题之——json 反序列化
    dajj
        16
    dajj  
       1 天前
    json 用 Gson 就好了, 完美
    hwdq0012
        17
    hwdq0012  
       1 天前
    @bobox #1 还是 c++ 静态反射 json 好
    zficode
        18
    zficode  
       1 天前
    大聪明
    fors
        19
    fors  
       1 天前
    HojiOShi
        20
    HojiOShi  
       1 天前   ❤️ 1
    @chendy #6 我看 lz 上一个帖子我就想吐槽了,2025 年还在出 java web 框架是怎么想的?如果放在十年前,还可以像 jfinal 那样吃一下 spring 留下的剩饭。
    mystical
        21
    mystical  
       1 天前
    练练手挺好的。真正项目上,还是用现成的吧,这玩意坑确实多。

    另外,fastjson 是不是使用了太内核的东西,一个 json 序列化怎么这么多恐怖的漏洞(没看过远吗,也很少用。个人用 Gson 多)
    @bobox
    @layxy
    4ra1n
        22
    4ra1n  
       1 天前
    fastjson 有漏洞是因为反序列化太自由了,拓展性太强了

    如果,你只允许,json 反序列化到 hashmap arraylist 自己从 hashmap 里一个个的 get k/v 设置 entity 属性,没有漏洞。fastjson 是允许自动反序列化到指定的 entity/pojo 类,而不是从 hashmap 手动搞过去,自动导致的漏洞。

    漏洞的核心是,自动类型推断和实例化,自动调用 getter/setter
    cheng6563
        23
    cheng6563  
       1 天前
    @mystical 主要就是自动类型推断,比如把类型用"@type"直接写到字段上
    macaodoll
        24
    macaodoll  
       1 天前
    LocalDateTime 这些处理好了吗
    dog82
        25
    dog82  
       1 天前
    xml 表达能力那么强,为啥被 json 偷家了,简直就是劣币驱逐良币
    jiazhutianxiadiy
        26
    jiazhutianxiadiy  
       1 天前 via Android
    @dog82 不知道好在什么地方。你可以列出下
    chendy
        27
    chendy  
       1 天前
    @dog82 因为表达能力过于强了,平时根本不需要这么复杂的东西,JSON 主要赢在一个简单
    CodeCodeStudy
        28
    CodeCodeStudy  
       1 天前
    为什么 javascript ,php 一个函数就搞定 json 了,是因为他们是动态语言吗
    aarontian
        29
    aarontian  
       1 天前
    @dog82 xml 冗余太多了,一个简单的对象编码出来巨大无比,解析慢,可读性差。除了表达能力强以外几乎一无是处。至于需要它表达能力的场景,用就是了。

    我最喜欢 yaml ,比起嵌 json 的各种转义,可读性太好了,就是解析性能好像弱点,作为配置文件无可替代
    cobbage
        30
    cobbage  
       1 天前 via Android
    @dog82 简单。之前看了一个视频说 xml 之前是官方推荐的正统。但是我感觉 xml 还是有用武之地的,也不知道是软件老的原因,页面傻瓜式布局的;数据传输基本没了。
    moverinfo
        31
    moverinfo  
    OP
       1 天前 via iPhone
    感谢各位的 comments ,我认为没有对错,也没有敌意,喜欢这样的氛围。我准备另开一贴把我设计这个框架的历史分享给大家,这样或许你们可以看到它的不同之处。V2ex 是个不错的论坛,这里大家可以自由表达自己的想法,非常好!
    Mandelo
        32
    Mandelo  
       1 天前
    你的这个工具有什么闪光点?对比 fastjson ,gson ?
    vultr
        33
    vultr  
       20 小时 38 分钟前
    不要给程序员做工具,不值得。
    msg7086
        34
    msg7086  
       20 小时 15 分钟前
    自己用当然随便撸一个就好,你要推广给别人用,那首先测试用例得狠狠加料。
    lakernote
        35
    lakernote  
       19 小时 15 分钟前
    自推自己的项目
    EasyPostman 🚀 一款高仿 Postman + 简易版 JMeter 的开源接口调试与压测工具,专为开发者优化,界面简洁、功能强大。
    🌟 GitHub: https://github.com/lakernote/easy-postman
    🏠 Gitee: https://gitee.com/lakernote/easy-postman
    📦 安装包下载地址: https://gitee.com/lakernote/easy-postman/releases
    🍏 Mac(M 芯): EasyPostman-最新版本.dmg
    🪟 Windows: EasyPostman-最新版本.msi
    siweipancc
        36
    siweipancc  
       16 小时 42 分钟前 via iPhone
    你应该造个 js 的,这边不是娱乐圈
    montaro2017
        37
    montaro2017  
       14 小时 33 分钟前
    @HuKing #5 还敢用 fastjson
    ychost
        38
    ychost  
       9 小时 33 分钟前
    @dog82 XML 更适合大模型,且解析容错性高
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   961 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:32 · PVG 04:32 · LAX 13:32 · JFK 16:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.