# HarryNode2 **Repository Path**: harryxiaocn/harry-node2 ## Basic Information - **Project Name**: HarryNode2 - **Description**: 简单的vb.net里,json序列号及反序列化。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-12 - **Last Updated**: 2026-03-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🎩 HarryNode2: 别看我写得简单,解析 JSON 我可是认真的! 嘿,朋友!你是否也曾因为引用几百KB的 `Newtonsoft.Json` 而感到心里沉重? 你是否只想解析一个小小的 JSON 字符串,却不得不引入一整个“宇宙”? 别慌,**HarryNode2** 来拯救你的代码洁癖了! 这是一个纯 VB.NET 手搓的 JSON 解析器。没有依赖,没有废话,直接把代码扔进你的项目里,就像把大象... 哦不,把冰箱塞进厨房一样简单。 ## ✨ 它能做什么? - **🚀 极简主义**:复制粘贴即用,不需要 NuGet,不需要引用,一个 Module 搞定一切。 - **🔍 智能解析**:自动识别 `Dict` (对象), `List` (数组), `String`, `Number`, `Bool`, `Null`。 - **🛠️ 容错处理**:虽然我是个轻量级选手,但我对格式错误可是零容忍,报错信息详细到让你怀疑人生(指错到具体的字符位置)。 - **🔄 来回转换**:不仅能解析,还能 `ToString()` 还原回 JSON 字符串。 ## 🥊 重量级选手 VS HarryNode2 | 特性 | 某知名 JSON 库 | HarryNode2 | | :--- | :--- | :--- | | **体积** | 几百 KB 起 | **不到 20 KB** (源码) | | **依赖** | 一堆依赖 | **零依赖** (只靠 System) | | **上手难度** | 需要看文档 | **看一眼就会** | | **心情** | 沉重 | **轻松愉快** | ## 🚀 快速上手 假设你有一段这样的 JSON: ```json { "name": "Harry", "age": 18, "skills": ["VB.NET", "JSON"], "isCool": true } ``` ### 1. 解析它! ```vb Dim jsonStr As String = "这里放上面的JSON字符串" Dim node As New HarryNode(jsonStr) ``` 就这么简单!`node` 现在就是你的魔法钥匙。 ### 2. 读取数据 HarryNode 的结构非常直观,就是一个递归的树状结构。 ```vb ' 首先,确定它是个字典 If node.NodeType = NodeTypeEnum.isDict Then Dim dict As Dictionary(Of String, HarryNode) = node.Value ' 拿名字 Dim nameNode As HarryNode = dict("name") Console.WriteLine($"名字: {nameNode.Value}") ' 输出: Harry (注意 Value 是 Object) ' 拿年龄 Dim ageNode As HarryNode = dict("age") Console.WriteLine($"年龄: {ageNode.Value}") ' 输出: 18 ' 拿技能列表 Dim skillsNode As HarryNode = dict("skills") If skillsNode.NodeType = NodeTypeEnum.isList Then Dim skillList As List(Of HarryNode) = skillsNode.Value Console.WriteLine($"第一个技能: {skillList(0).Value}") ' 输出: VB.NET End If ' 拿布尔值 Console.WriteLine($"酷不酷: {dict("isCool").Value}") ' 输出: True End If ``` ### 3. 还原它 ```vb ' 修改一下数据(注意 Value 是 Object,转换需小心) ' 假设我们要把名字改回 JSON 字符串 Console.WriteLine(node.ToString()) ``` `ToString()` 方法会自动帮你把树状结构序列化回标准的 JSON 字符串,连转义字符都处理得妥妥当当(`\n`, `\t`, `\uXXXX` 通通不在话下)。 ## 🧠 核心原理(给好奇宝宝们) HarryNode 的核心逻辑就像剥洋葱: 1. **New(json)**: 构造函数瞬间启动“扫描仪”。 2. **Analysis**: 看一眼第一个字符是谁? - `{`?那是字典! - `[`?那是列表! - `"`?那是字符串! - 数字或 `-`?那是数字! - `t` or `f`?那是布尔值! - `n`?那是 `null`! 3. **递归**: 如果是字典或列表,它会继续 `New HarryNode(...)` 直到解析完整个字符串。 ## ⚠️ 注意事项(以此致敬爱的开发者) 1. **类型转换**: `Value` 属性返回的是 `Object`。如果你要算数,记得 `CDec(node.Value)`,因为它内部用 `Decimal` 存数字,精度高! 2. **键不存在**: 如果 JSON 里没有那个 Key,直接 `dict("key")` 会抛出 .NET 标准的 KeyNotFoundException,记得用 `ContainsKey` 检查一下哦。 3. **性能**: 它是通过字符串操作实现的,对于几十 MB 的大 JSON 可能会稍微慢一点(就像让一位绅士去跑马拉松)。但对于配置文件、API 返回值,它跑得比谁都快! ## 📜 协议 想用就用,改了也行,署名最好,不署名... 我也不会顺着网线去找你。开心就好!