# json-stream-parse **Repository Path**: zmzmCoder/json-stream-parse ## Basic Information - **Project Name**: json-stream-parse - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-26 - **Last Updated**: 2025-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JSON Stream Parser 一个支持流式解析 JSON 的解析器,支持自动修复和增量解析。可以逐字符解析 JSON 字符串,实时获取解析结果。 ## 特性 - 🚀 **流式解析**:支持逐字符解析 JSON,无需等待完整 JSON 字符串 - 🔧 **自动修复**:可选的自动修复功能,能够处理常见的 JSON 格式错误 - 📊 **增量解析**:实时输出解析结果,使用 JSONURI 风格的路径标识 - 🎯 **事件驱动**:基于 EventEmitter 的事件系统,方便监听解析过程 - 🐛 **调试模式**:支持调试模式,输出详细的解析日志 ## 安装 使用 npm: ```bash npm install json-stream-parse ``` 使用 pnpm: ```bash pnpm add json-stream-parse ``` 使用 yarn: ```bash yarn add json-stream-parse ``` ## 构建 如果需要从源码构建: ```bash # 安装依赖 npm install # 构建项目 npm run build # 开发模式(监听文件变化) npm run dev ``` 构建后的文件会输出到 `dist/` 目录(所有文件都是压缩版本): - `dist/index.esm.js` - ES 模块格式(已压缩) - `dist/index.cjs.js` - CommonJS 格式(已压缩) - `dist/index.umd.js` - UMD 格式(已压缩) ## 使用方式 ### ES 模块 ```javascript import JSONParser from 'json-stream-parse'; ``` ### CommonJS ```javascript const JSONParser = require('json-stream-parse'); ``` ### 浏览器(UMD) ```html ``` ### 直接使用源码 ```html ``` ## 使用方法 ### 基本用法 **ES 模块 (推荐):** ```javascript import JSONParser from 'json-stream-parse'; ``` **CommonJS:** ```javascript const JSONParser = require('json-stream-parse'); ``` **浏览器 (UMD):** ```html ``` **使用源码:** ```javascript import JSONParser from './index.js'; // 创建解析器实例 const parser = new JSONParser({ autoFix: false, // 是否启用自动修复 parentPath: null, // 父路径(可选) debug: false // 是否启用调试模式 }); // 监听解析事件 parser.on('data', (data) => { console.log('解析数据:', data); // data 格式: { uri: 'path/to/key', delta: value } }); parser.on('string-resolve', (data) => { console.log('字符串解析完成:', data); }); parser.on('object-resolve', (data) => { console.log('对象解析完成:', data); }); parser.on('finish', (data) => { console.log('解析完成:', data); }); // 开始解析 const jsonString = '{"name": "bearbobo", "age": 10}'; for (const char of jsonString) { parser.trace(char); } // 完成解析 parser.finish(); ``` ### 流式解析示例 ```javascript import JSONParser from 'json-stream-parse'; const parser = new JSONParser({ autoFix: true }); let result = {}; parser.on('data', (data) => { // 使用 JSONURI 路径更新结果对象 const path = data.uri ? data.uri.split('/').filter(p => p) : []; let current = result; for (let i = 0; i < path.length - 1; i++) { if (!current[path[i]]) { current[path[i]] = {}; } current = current[path[i]]; } const key = path[path.length - 1]; if (typeof data.delta === 'string') { current[key] = (current[key] || '') + data.delta; } else { current[key] = data.delta; } }); parser.on('finish', (finalData) => { console.log('最终结果:', finalData); console.log('累积结果:', result); }); // 模拟流式输入 const jsonChunks = ['{"name":', ' "bearbobo",', ' "age":', ' 10}']; jsonChunks.forEach(chunk => { for (const char of chunk) { parser.trace(char); } }); parser.finish(); ``` ### 自动修复功能 启用自动修复后,解析器可以自动处理以下常见错误: - 缺少引号(自动补充) - 中文引号和单引号(自动转换) - 多余的引号 - 缺少值的处理 - 转义字符的处理 ```javascript import JSONParser from 'json-stream-parse'; const parser = new JSONParser({ autoFix: true }); // 可以解析格式不完美的 JSON parser.trace('{name: "bearbobo"}'); // 缺少引号会自动修复 ``` ### 事件说明 #### `data` 事件 当解析到数据时触发,包括字符串的增量字符、数字、布尔值、null 等。 ```javascript parser.on('data', (data) => { // data.uri: JSONURI 风格的路径,如 'name' 或 '0/items/1' // data.delta: 增量值 // data.error: 错误信息(如果有) }); ``` #### `string-resolve` 事件 当字符串解析完成时触发。 ```javascript parser.on('string-resolve', (data) => { // data.uri: 路径 // data.delta: 完整的字符串值 }); ``` #### `object-resolve` 事件 当对象或数组解析完成时触发。 ```javascript parser.on('object-resolve', (data) => { // data.uri: 路径 // data.delta: 完整的对象或数组 }); ``` #### `finish` 事件 当整个 JSON 解析完成时触发。 ```javascript parser.on('finish', (data) => { // data: 完整的解析结果 }); ``` ## API 参考 ### 构造函数 ```javascript new JSONParser(options) ``` **参数:** - `options.autoFix` (boolean, 默认: false): 是否启用自动修复 - `options.parentPath` (string, 可选): 父路径前缀 - `options.debug` (boolean, 默认: false): 是否启用调试模式 ### 方法 #### `trace(input)` 解析输入的字符或字符串。 ```javascript parser.trace('{'); parser.trace('"name"'); parser.trace(': "value"'); ``` #### `finish()` 完成解析,验证解析状态。 ```javascript parser.finish(); ``` #### `on(event, listener)` 监听事件。 ```javascript parser.on('data', (data) => { /* ... */ }); ``` #### `off(event, listener)` 移除事件监听器。 ```javascript parser.off('data', listener); ``` #### `once(event, listener)` 监听事件一次。 ```javascript parser.once('finish', (data) => { /* ... */ }); ``` ### 属性 - `currentState`: 获取当前解析状态 - `lastState`: 获取上一个解析状态 - `arrayIndex`: 获取当前数组索引 ## JSONURI 路径说明 解析器使用 JSONURI 风格的路径来标识数据位置: - 对象属性:`"name"` → 路径: `"name"` - 数组元素:`[0, 1, 2]` → 路径: `"0"`, `"1"`, `"2"` - 嵌套对象:`{"user": {"name": "bob"}}` → 路径: `"user/name"` - 嵌套数组:`{"items": [{"id": 1}]}` → 路径: `"items/0/id"` ## 示例 查看 `demo.html` 文件获取完整的交互式示例。 ## 贡献 欢迎提交 Issue 和 Pull Request! ## 开发 ```bash # 克隆项目 git clone https://github.com/your-username/json-stream-parse.git cd json-stream-parse # 安装依赖 npm install # 开发模式 npm run dev # 构建 npm run build ``` ## 发布 发布到 npm: ```bash # 1. 确保已登录 npm npm login # 2. 更新版本号(遵循语义化版本) npm version patch # 或 minor, major # 3. 发布 npm publish ``` ## 许可证 MIT License Copyright (c) 2024 json-stream-parse