# json **Repository Path**: chjgfg/json ## Basic Information - **Project Name**: json - **Description**: 用来解析json的 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-25 - **Last Updated**: 2026-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 📄 json-rs 纯 Rust 手写实现的 JSON 解析器/序列化器,从零构建词法分析、语法分析与数据模型,无外部依赖,轻量且专注于 JSON 底层原理实现。 --- ## ✨ 项目介绍 `json-rs` 是一个**完全手写、无第三方依赖**的 JSON 处理库,包含: - 词法分析器(Lexer):负责 JSON 字符串的分词与 Token 生成 - 语法分析器(Parser):基于 Token 流构建 JSON 数据模型 - 序列化器(Dumper):将 JSON 数据模型转回标准 JSON 字符串 - 迭代器、类型转换等辅助工具:提供灵活的 JSON 数据操作方式 项目目标是通过完整的 JSON 处理流程,深入理解编译原理基础与 Rust 系统编程,适合学习、练手与参考。 --- ## 📂 项目结构(与你当前目录完全对应) ``` json-rs/ ├── .idea/ # IDE 配置文件 ├── src/ # 核心源码目录 │ ├── bin/ │ │ └── main.rs # 示例入口/测试程序 │ ├── lib.rs # 库入口,对外暴露核心接口 │ ├── json_token.rs # Token 定义,词法分析输出的基础单元 │ ├── json_lexer.rs # 词法分析器,将字符串转换为 Token 流 │ ├── json_parser.rs # 语法分析器,从 Token 流构建 JSON 数据模型 │ ├── json_basic.rs # JSON 基础数据结构定义(值类型、对象/数组实现) │ ├── json_next.rs # 解析器核心逻辑/Next 状态机(如状态转移、错误恢复) │ ├── json_dumper.rs # JSON 序列化器,将数据模型转回字符串 │ ├── json_iterator.rs # JSON 迭代器,支持对象/数组的遍历操作 │ ├── json_exchange.rs # 数据转换/类型交换相关逻辑(JSON ↔ Rust 原生类型) │ └── json_exchang.rs # (疑似笔误的同功能文件,可后续合并优化) ├── .gitignore # Git 忽略配置 ├── Cargo.lock # 依赖版本锁定文件 ├── Cargo.toml # 项目配置与依赖清单 └── README.md # 项目说明文档 ``` --- ## 🚀 快速上手 ### 1. 本地运行示例 ```bash # 克隆项目 git clone https://github.com/chjgfg/json-rs.git cd json-rs # 运行示例程序 cargo run ``` ### 2. 基础解析示例 ```rust use json_rs::{parse, dump}; fn main() { // 待解析的 JSON 字符串 let raw = r#"{ "name": "json-rs", "version": "0.1.0", "is_learning": true, "tags": ["rust", "json", "parser"] }"#; // 解析为 JSON 数据模型 let value = parse(raw).expect("JSON 解析失败"); println!("解析结果:{:#?}", value); // 序列化回 JSON 字符串 let output = dump(&value).expect("JSON 序列化失败"); println!("序列化结果:{}", output); } ``` --- ## 📌 核心功能 | 模块 | 功能说明 | |------|----------| | `json_token.rs` | 定义所有 JSON 相关的 Token 类型(如 `String`, `Number`, `ObjectStart` 等) | | `json_lexer.rs` | 实现词法分析逻辑,处理空白、转义字符、数字/字符串解析,输出 Token 流 | | `json_parser.rs` | 实现递归下降解析,根据 Token 流构建 JSON 数据结构,处理对象、数组、嵌套结构 | | `json_dumper.rs` | 实现 JSON 序列化,支持格式化/压缩输出,将数据模型转回标准 JSON 字符串 | | `json_iterator.rs` | 为 JSON 对象/数组提供迭代器支持,方便遍历数据 | | `json_exchange.rs` | 提供 JSON 类型与 Rust 原生类型的转换方法,如 `as_str()`, `as_bool()`, `as_f64()` 等 | --- ## 📝 开发进度 - ✅ 词法分析器:基础 Token 解析、空白过滤、字符串/数字/布尔/空值识别 - ✅ 语法分析器:对象、数组、嵌套结构解析,基础错误检测 - ✅ 数据模型:完整 JSON 类型定义(`Object`, `Array`, `String`, `Number`, `Bool`, `Null`) - ✅ 序列化器:基础 JSON 字符串生成,支持格式化输出 - ⬜ 完善错误处理:更详细的错误信息、位置标记、可恢复解析 - ⬜ 性能优化:减少内存分配、优化 Token 流处理速度 - ⬜ 高级特性:路径查询、JSON Patch、Schema 校验(可选) --- ## 🤝 贡献与反馈 - 欢迎提交 Issue 反馈 Bug、功能建议 - 欢迎 Fork 并提交 PR,一起完善解析器功能 - 如果你对 JSON 解析/编译原理有疑问,也可以在 Issue 中交流讨论