学习 JSON 解析

aj-json:为了学习而写的 JSON 解析器

aj-json 是一个为了学习 JSON 如何解析、了解一点简单编译原理而写的小项目。它不是可用于生产环境的 JSON 类库。更适合把它当成一份可阅读、可修改、可跟着调试的学习材料:看看一串字符怎样一步步变成 Java 对象。

生产项目请使用有持续维护的 JSON 库,例如 Jackson、Gson 或 JSON-B。不要将 aj-json 用于不可信输入、需要严格兼容的接口,或不能出现意外解析结果的数据。

能从这个项目学到什么

程序拿到一段 JSON 文本后,主要要解决两个问题:

  1. 每一小段文本代表什么?例如 { 表示对象开始,true 表示布尔值。
  2. 这些小段能以什么顺序出现?例如对象的键后面必须是 :,再后面才是值。

aj-json 把这两件事分开。Lexer 负责逐个读取字符并贴上“标签”(token);FMS(状态机)按照顺序读取 token,再组装出普通的 Java 值。

重要限制

从这里开始

只有在跟着示例学习或阅读源码时,才建议添加依赖:

<dependency>
    <groupId>com.ajaxjs</groupId>
    <artifactId>aj-json</artifactId>
    <version>1.6</version>
</dependency>

接下来阅读动手解析 JSON。想了解内部过程时,继续看解析器如何工作。

源码与参考