Documentation
¶
Overview ¶
leptjson.go - Go语言版JSON库实现
这个包实现了一个简单的JSON解析器,支持基本的JSON值类型 包括null、true、false、数字、字符串和数组等。后续版本将支持对象。
数组解析的特殊情况处理: 1. 基本规则:
- 数组必须以方括号[]开始和结束
- 数组元素之间必须用逗号分隔
- 空数组[]是合法的
- 数组末尾不能有多余的逗号(如[1,2,]是非法的)
2. 元素处理:
- 支持任意类型的JSON值作为元素
- 元素之间可以有任意数量的空白字符
- 元素可以是null、true、false、数字、字符串或数组
3. 嵌套数组:
- 支持任意深度的数组嵌套
- 每个嵌套数组都必须遵循相同的规则
- 嵌套数组的解析使用递归方式
4. 错误处理:
- PARSE_MISS_COMMA_OR_SQUARE_BRACKET: 缺少逗号或右方括号
- PARSE_INVALID_VALUE: 无效的数组元素
- PARSE_EXPECT_VALUE: 期望一个值
5. 性能考虑:
- 使用切片动态增长数组
- 预分配合理的初始容量
- 避免频繁的内存分配
6. 边界情况:
- 处理空数组[]
- 处理单个元素的数组[1]
- 处理嵌套空数组[[]]
- 处理混合类型数组[1,"string",null,true]
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ParseError ¶
type ParseError int
ParseError 表示解析过程中可能出现的错误
const ( PARSE_OK ParseError = iota // 解析成功 PARSE_EXPECT_VALUE // 期望一个值 PARSE_INVALID_VALUE // 无效的值 PARSE_ROOT_NOT_SINGULAR // 根节点不唯一 PARSE_NUMBER_TOO_BIG // 数字太大 PARSE_MISS_QUOTATION_MARK // 缺少引号 PARSE_INVALID_STRING_ESCAPE // 无效的转义序列 PARSE_INVALID_STRING_CHAR // 无效的字符 PARSE_INVALID_UNICODE_HEX // 无效的Unicode十六进制 PARSE_INVALID_UNICODE_SURROGATE // 无效的Unicode代理对 PARSE_MISS_COMMA_OR_SQUARE_BRACKET // 缺少逗号或方括号 )
解析错误常量
func Parse ¶
func Parse(v *Value, json string) ParseError
Parse 解析JSON文本
Example (Array) ¶
示例 - 解析数组
v := Value{}
Parse(&v, "[1,2,3]")
fmt.Println(v.String())
Output: [1,2,3]
Example (Error) ¶
示例 - 错误处理
v := Value{}
err := Parse(&v, "[1,2,")
fmt.Println(err)
Output: 缺少逗号或方括号
Example (False) ¶
示例 - 解析false值
v := Value{}
Parse(&v, "false")
fmt.Println(v.String())
Output: false
Example (NestedArray) ¶
示例 - 解析嵌套数组
v := Value{}
Parse(&v, "[[1,2],[3,4],5]")
fmt.Println(v.String())
Output: [[1,2],[3,4],5]
Example (Null) ¶
示例 - 解析null值
v := Value{}
Parse(&v, "null")
fmt.Println(v.String())
Output: null
Example (Number) ¶
示例 - 解析数字
v := Value{}
Parse(&v, "123.456")
fmt.Println(v.String())
Output: 123.456
Example (String) ¶
示例 - 解析字符串
v := Value{}
Parse(&v, "\"Hello, World!\"")
fmt.Println(v.String())
Output: Hello, World!
Example (True) ¶
示例 - 解析true值
v := Value{}
Parse(&v, "true")
fmt.Println(v.String())
Output: true
type Value ¶
type Value struct {
Type ValueType `json:"type"` // 值类型
N float64 `json:"n"` // 数字值(当Type为NUMBER时有效)
S string `json:"s"` // 字符串值(当Type为STRING时有效)
A []*Value `json:"a"` // 数组值(当Type为ARRAY时有效)
}
Value 表示一个JSON值
Click to show internal directories.
Click to hide internal directories.