• 请不要在回答技术问题时复制粘贴 AI 生成的内容
moverinfo
V2EX  ›  程序员

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

  •  
  •   moverinfo · Sep 9, 2025 via iPhone · 9195 views
    This topic created in 424 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    我最喜欢 yaml ,比起嵌 json 的各种转义,可读性太好了,就是解析性能好像弱点,作为配置文件无可替代
    soap0X
    soap0X
    Sep 9, 2025 via Android
    30
    @dog82 简单。之前看了一个视频说 xml 之前是官方推荐的正统。但是我感觉 xml 还是有用武之地的,也不知道是软件老的原因,页面傻瓜式布局的;数据传输基本没了。
    moverinfo
    moverinfo
    OP
    Sep 9, 2025 via iPhone
    31
    感谢各位的 comments ,我认为没有对错,也没有敌意,喜欢这样的氛围。我准备另开一贴把我设计这个框架的历史分享给大家,这样或许你们可以看到它的不同之处。V2ex 是个不错的论坛,这里大家可以自由表达自己的想法,非常好!
    Mandelo
    Mandelo
    Sep 9, 2025
    32
    你的这个工具有什么闪光点?对比 fastjson ,gson ?
    vultr
    vultr
    Sep 10, 2025
    33
    不要给程序员做工具,不值得。
    msg7086
    msg7086
    Sep 10, 2025
    34
    自己用当然随便撸一个就好,你要推广给别人用,那首先测试用例得狠狠加料。
    lakernote
    lakernote
    Sep 10, 2025
    35
    自推自己的项目
    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
    siweipancc
    Sep 10, 2025 via iPhone
    36
    你应该造个 js 的,这边不是娱乐圈
    montaro2017
    montaro2017
    Sep 10, 2025
    37
    @HuKing #5 还敢用 fastjson
    ychost
    ychost
    Sep 10, 2025
    38
    @dog82 XML 更适合大模型,且解析容错性高
    visper
    visper
    Sep 11, 2025
    39
    听说现在网页开发都会使用 ajax 这种技术来进行页面局部刷新来增强用户体验。
    CodeCaster
    CodeCaster
    Sep 11, 2025
    40
    看了 github 的项目,其中有提到模块化,方便交流一下么(方便的话,可以加一下我 wechat:jiyujie )?我这边做了一个插件化的开发框架( https://github.com/ModelEngine-Group/fit-framework ),上层搭载 AI 框架,同在推广求 star 中,感觉可以交流一下技术,感谢
    moverinfo
    moverinfo
    OP
    Sep 12, 2025 via iPhone
    41
    我看过,个人感觉设计层面跟 Spring boot 比较接近,也可能我有点以偏概全了,有空我再仔细看看。别介意哈。如果对模块化设计感兴趣的话可以参见 tinystruct 项目代码。
    CodeCaster
    CodeCaster
    Sep 12, 2025
    42
    @moverinfo #41 你好,我发现你的回复都没有点击平台的回复,这样的话,别人都是不知道你回复了的,是没有提示的。我是特意关注了下,找了下之前的留言,才发现你的回复的。首先感谢能够得到回复。

    然后,我也很高兴你可过我的项目(因为没有回复,我不确定是不是理解有错),之所以我比较感兴趣,就是因为你的框架也有模块化的特点,但是,模块化 != 插件化。

    模块化,我们当前用任意框架写的代码,比如 Spring ,我也可以创建若干个 Module (模块),然后通过一个核心模块的 pom 来组织各个其他模块,这样也是分模块的。因为我看不到你的项目的整体架构图,所以我对此只能先交流来慢慢了解。

    插件化,我实现的插件化和模块化的最大区别是没有 pom 的依赖,我不确定你的框架是不是如此。插件与插件之间的交互都通过接口来实现,因此,插件的业务逻辑不随插件的部署状态而改变,意思是,在 FIT 框架下,插件 A 和插件 B 可以作为一个 Mono (单体)服务聚合启动,同进程,此时,他们的通信为本地方法通信,他们也可以分别作为两个微服务分别启动,两个进程,此时他们的通信为 RPC 通信,但是插件的代码是完全不感知的。这个就是 FIT 框架的最大特点,支持插件的聚散部署,在此基础上,我用插件写了一个热插拔的插件,使得整个体系也支持了插件的热插拔。

    也就是说,FIT 框架的设计是和 Spring 有比较大的区别的,但是和你说的模块化比较接近,正因为这个原因,所以我才想和你再多交流一下。感谢

    PS:我看到你的项目之后,先点了一个 Star 支持了一下了
    skallz
    skallz
    Sep 15, 2025
    43
    哈哈,不是大多数 java 项目,是很多项目都用 json 了,不过 json 解析容易出问题是真的,之前 GTA 臭名昭著的游戏加载极其慢不就是因为 C++解析 json 没写好导致的
    moverinfo
    moverinfo
    OP
    Sep 15, 2025 via iPhone
    44
    @skallz 如果 JSON 比较大的话,采用的解析方式和策略就要调整。要看场景。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1836 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 127ms · UTC 03:56 · PVG 11:56 · LAX 19:56 · JFK 22:56
    ♥ Do have faith in what you're doing.