Repository navigation
Releases: icloudza/fxjson
Release list
fxjson 1.2.4 实现文档中缺失的方法并修复测试问题
🎯 主要变更
新增方法
- FromString() - 从JSON字符串创建Node(文档中最重要的缺失方法)
- FromStringWithOptions() - 带选项的字符串解析方法
- IsValidJSON() - 验证JSON格式有效性
- Keys() - 返回对象键名(修正返回类型为[]string)
- IsScalar() / IsContainer() - 分组类型检查方法
API兼容性修复
- 修正
Keys()方法返回类型从[][]byte改为[]string - 保留原方法为
KeysBytes()确保向后兼容 - 所有新方法符合官方文档API规范
测试完善
- 新增
missing_methods_test.go- 全面测试新增方法 - 新增
comprehensive_test.go- FromString方法综合测试 - 修复所有测试失败问题,100%通过率
🔧 技术实现
IsValidJSON 智能验证
- 已解析的JSON结构(对象/数组)直接返回true
- 字符串节点通过重新解析验证JSON有效性
- 支持所有JSON类型:对象、数组、字符串、数字、布尔值、null
性能优化
- FromString 仅为 FromBytes 的轻量包装
- 性能测试显示开销极小(<1.5x)
- 所有方法保持零分配特性
📊 测试结果
- 测试文件: 3个专门测试文件
- 测试用例: 200+ 个测试场景
- 性能测试: 包含大数据处理和并发测试
- 通过率: 100% (4.238s总耗时)
🎉 完成状态
- ✅ 文档API完全对齐
- ✅ 所有方法性能优异
- ✅ 完整测试覆盖
- ✅ 向后兼容保证
🚀 v1.2.3 - API简化与性能优化版本
✨ 主要改进
🎯 API 设计优化
- 移除冗余方法:删除
GetFast()方法,统一使用Get()方法 - 简化用户体验:无需记住多个相似方法,降低学习成本
- 保持向后兼容:现有
Get()方法功能完全保留
⚡ 性能表现
- 超快访问速度:Get 方法平均 512ns/操作
- 大数据支持:轻松处理 3MB+ JSON 文件,50K+ 元素数组
- 深层嵌套:支持 5000+ 层深度,避免栈溢出
- 并发安全:通过 race detector 验证,支持高并发场景
🔧 技术改进
- 代码精简:删除 283 行冗余代码,提高维护性
- 内存优化:合理的内存使用,无泄漏风险
- 测试覆盖:53.1% 代码覆盖率,核心功能全面测试
📈 性能基准
| 操作类型 | 性能表现 | 对比标准库 |
|---|---|---|
| JSON解析 | ~50ms (3MB) | - |
| Get操作 | 512ns | 80+倍提升 |
| 随机访问 | 2ms (1000次) | - |
| 深层嵌套 | 6ms (1000层) | 无栈溢出 |
🛡️ 稳定性保证
- ✅ 所有测试通过 (100+ 测试用例)
- ✅ 并发安全验证 (race detector)
- ✅ 边界情况处理完善
- ✅ 内存安全检查通过
🔄 迁移指南
如果你之前使用了 GetFast() 方法,只需将其替换为 Get() 即可:
// 之前
value := node.GetFast("key")
// 现在
value := node.Get("key") // 性能相同,API更简洁
🎉 适用场景
- 📊 大数据JSON处理
- 🚀 高性能Web API
- 🔄 实时数据解析
- 🎯 微服务架构
- 📱 移动端应用
感谢社区的反馈和建议!这个版本让 fxjson 更加简洁易用,同时保持了卓越的性能表现。fxjson v1.2.2 - 性能优化与功能增强
🚀 新功能
- JSON 序列化功能: 添加完整的 JSON 序列化支持
- 缓存控制: 新增 DisableCaching 函数,支持禁用全局缓存
- 安全限制: 增强 JSON 解析的安全选项和限制
- 调试监控: 添加性能监控和调试功能
- FloatString 方法: 新增 FloatString API 方法
⚡ 性能优化
- 缓存算法优化: 使用 CRC32 替代 MD5 生成缓存键,显著提升性能
- JSON 格式判断: 优化解析前的格式检测逻辑
- 嵌套展开: 智能处理嵌套 JSON 字符串展开
🛠️ 改进
- 错误处理: 完善错误类型定义、错误对象创建和上下文信息
- API 文档: 完善 API 使用文档
- 基准测试: 添加 JSON 遍历相关的性能基准测试
📈 基准测试
新增多项性能基准测试,确保优化效果可量化验证。
🔥 fxjosn v1.2.1
🎯 版本更新概述
- 🐛 关键 Bug 修复
- 修复 IP 地址字符串解析错误 (fxjson.go)
- 问题:包含多个小数点的字符串(如 "192.168.1.1")被错误识别为数字类型
- 原因:isValidJSON 函数错误地将数字格式的字符串识别为嵌套 JSON
- 解决:增强 isValidJSON 函数,只允许 {、[、" 开头的字符串被识别为嵌套 JSON
- 影响:修复了所有 IP 地址相关的验证功能
- ✨ 新增功能
新文件:utils.go - 40+ 实用工具函数
- 默认值支持函数:
- StringOr(), IntOr(), FloatOr(), BoolOr(), UintOr()
- 零分配设计,性能优异
- 批量操作函数:
- GetMultiple() - 同时获取多个路径的值
- HasAnyPath() - 检查是否存在任意路径
- HasAllPaths() - 检查是否存在所有路径
- 数据转换工具:
- ToStringSlice(), ToIntSlice(), ToFloatSlice(), ToBoolSlice()
- 将数组转换为对应类型的切片
- 数据验证工具:
- IsValidEmail(), IsValidURL(), IsValidPhone()
- IsValidUUID(), IsValidIPv4(), IsValidIPv6(), IsValidIP()
- 字符串操作:
- Contains(), StartsWith(), EndsWith()
- ToLower(), ToUpper(), Trim()
- 数组操作:
- First(), Last() - 获取首尾元素
- Slice() - 数组切片
- Reverse() - 反转数组
- 对象操作:
- Merge() - 合并对象
- Pick() - 选择指定键
- Omit() - 排除指定键
- 比较和验证:
- Equals() - 节点相等性比较
- IsEmpty() - 检查是否为空
- IsPositive(), IsNegative(), IsZero(), IsInteger()
- InRange() - 数字范围检查
新文件:errors.go - 增强错误处理
- 定义了 ErrorType 枚举
- 实现了 FxJSONError 结构体
- 提供上下文感知的错误信息
- 支持行列位置计算
- 包含多个错误创建辅助函数
缓存功能完善 (cache.go)
- 新增 DisableCaching() 函数,完善缓存管理 API
- ⚡ 性能优化
缓存键生成优化 (cache.go)
- 将哈希算法从 MD5 改为 CRC32
- 性能提升约 3-4 倍
- 从 crypto/md5 改为 hash/crc32
- 🧪 测试增强
新文件:utils_test.go - 完整的工具函数测试
- 所有新增功能的单元测试
- 基准测试验证性能
- 测试覆盖率 100%
📊 性能影响
- 核心操作:保持零分配,性能无退化
- 新增功能:全部实现零分配或极低分配
- Bug 修复:不影响性能,反而提升了字符串处理的准确性
🔄 兼容性
- ✅ 完全向后兼容:所有改动都是新增或内部优化
- ✅ API 稳定:现有接口无任何破坏性变更
- ✅ Go 版本:继续支持 Go 1.18+
📦 文件变更统计
修改的文件:
- fxjson.go (1 处修改:isValidJSON 函数增强)
- cache.go (2 处修改:添加 DisableCaching,优化哈希算法)
新增的文件:
- utils.go (600+ 行,40+ 个新函数)
- errors.go (160+ 行,错误处理系统)
- utils_test.go (400+ 行,完整测试覆盖)
FxJSON v1.2.0 - 功能扩展
🚀 版本亮点
FxJSON v1.2.0 带来了全面的企业级功能扩展,在保持原有高性能的基础上,新增了SQL风格查询、数据聚合、智能缓存等核心特性,让JSON处理更加强大和便捷。
✨ 新增功能
🔍 SQL风格查询引擎
- 条件查询: 支持 >, <, =, !=, >=, <=, contains 等操作符
- 排序和分页: SortBy(), Limit(), Offset() 支持
- 统计功能: Count(), First() 等聚合查询
- 性能: 简单查询 2.8μs,复杂查询 4.8μs
// 多条件查询示例
results, _ := notesList.Query().
Where("views", ">", 1000).
Where("category", "!=", "food").
SortBy("views", "desc").
Limit(10).
ToSlice()
📊 数据聚合与统计
- 分组聚合: GroupBy() 按字段分组
- 统计函数: Sum(), Avg(), Count(), Max(), Min()
- 多级聚合: 支持复杂的嵌套统计
- 性能: 数据聚合 4.2μs,大数据聚合 1.3ms
// 分组统计示例
stats, _ := data.Aggregate().
GroupBy("category").
Count("total_notes").
Sum("revenue", "total_revenue").
Avg("engagement_rate", "avg_engagement").
Execute(data)
🎨 数据变换与映射
- 字段映射: 灵活的字段重命名和路径映射
- 类型转换: 自动类型转换和默认值设置
- 数据清洗: 支持数据预处理和格式化
- 性能: 435ns/op,极速处理
// 数据变换示例
mapper := FieldMapper{
Rules: map[string]string{
"user.name": "username",
"user.followers": "fans_count",
},
DefaultValues: map[string]interface{}{
"status": "active",
},
}
result, _ := node.Transform(mapper)
💾 智能缓存系统
- LRU缓存: 自动最近最少使用淘汰
- TTL支持: 灵活的过期时间设置
- 性能监控: 完整的缓存统计信息
- 性能: 缓存解析比普通解析快 4倍,内存减少 98%
// 启用缓存
cache := fxjson.NewMemoryCache(100)
fxjson.EnableCaching(cache)
// 带缓存的解析
node := fxjson.FromBytesWithCache(data, 5*time.Minute)
✅ 数据验证框架
- 规则引擎: 类型、长度、范围验证
- 自定义验证: 支持自定义验证函数
- 错误收集: 详细的验证错误信息
- 性能: 208ns/op,微秒级验证
// 验证规则定义
validator := &DataValidator{
Rules: map[string]ValidationRule{
"title": {Required: true, Type: "string", MaxLength: 100},
"views": {Required: true, Type: "number", Min: 0},
},
}
result, errors := node.Validate(validator)
🔧 增强调试工具
- 解析信息: 详细的解析时间、内存使用统计
- 美化打印: JSON结构化显示
- 差异对比: JSON变更检测和对比
- 结构分析: 节点类型和结构检查
// 调试模式
node, debugInfo := fxjson.FromBytesWithDebug(data)
fmt.Printf("解析时间: %v, 内存: %d bytes",
debugInfo.ParseTime, debugInfo.MemoryUsage)
📊 流式处理与批处理
- 零分配流式处理: 高效的大数据集处理
- 批处理器: 自定义批次大小和处理逻辑
- 提前终止: 支持条件终止处理
- 性能: 流式处理 2.8μs,零内存分配
// 流式处理
err := data.Stream(func(item Node, index int) bool {
// 处理逻辑
return true // 继续处理
})
🛠️ 重要修复
空字符串处理
- 安全修复: 彻底解决空字符串导致的panic问题
- 兼容性: 完美处理 "" 空字符串场景
- 稳定性: 增强了内存安全检查
📈 性能表现
| 功能特性 | 操作耗时 | 内存使用 | 性能对比 |
|---|---|---|---|
| 缓存解析 | 1.4μs | 80B | 4x faster |
| 数据变换 | 435ns | 368B | 极速处理 |
| 数据验证 | 208ns | 360B | 微秒级响应 |
| 简单查询 | 2.8μs | 640B | 毫秒级查询 |
| 数据聚合 | 4.2μs | 2.6KB | 高效统计 |
| 流式处理 | 2.8μs | 0B | 零分配处理 |
🎯 应用场景
- API数据处理: 高性能API响应解析和转换
- 配置管理: 复杂配置文件的解析和验证
- 数据分析: 大数据集的实时统计和聚合
- 内容管理: 文档结构分析和内容转换
- 日志处理: 结构化日志的解析和分析
🔧 使用示例
// 完整功能演示
cache := fxjson.NewMemoryCache(100)
fxjson.EnableCaching(cache)
// 解析JSON
node := fxjson.FromBytesWithCache(jsonData, 5*time.Minute)
// SQL风格查询
results, _ := node.Get("items").Query().
Where("status", "=", "active").
Where("price", ">", 100).
SortBy("created_at", "desc").
Limit(10).
ToSlice()
// 数据聚合
stats, _ := node.Get("items").Aggregate().
GroupBy("category").
Count("total").
Sum("price", "total_price").
Avg("rating", "avg_rating").
Execute(node.Get("items"))
// 数据验证
validator := &fxjson.DataValidator{/.../}
validated, errors := results[0].Validate(validator)
📦 安装升级
go get -u github.com/icloudza/fxjson@v1.2.0
🔄 兼容性
- ✅ 向下兼容: 完全兼容 v1.1.x 所有API
- ✅ Go版本: 支持 Go 1.18+
- ✅ 零依赖: 无外部依赖,轻量级设计
FxJSON v1.2.0 - 让JSON处理更智能、更高效! 🚀
v1.1.01 修复 Bug
🔧 主要修复
- 空字符串 Panic 问题(严重)
- 修复了 unsafe.String(&strBytes[0], len(strBytes)) 的空切片访问问题
- 现在空字符串会被安全处理 - 输入验证增强
- 新增 ParseOptions 支持安全限制
- 默认限制:最大1000层嵌套、1MB字符串、10k对象键等
- 严格模式拒绝格式错误的 JSON - 内存统计修复
- 创建安全的内存统计工具
- 防止整数溢出和异常值
v1.1.0 - High-Performance Decode Optimization
🚀 FxJSON v1.1.0 - 解码性能大幅优化
✨ 新增功能
🔥 高性能解码方法
DecodeStruct(data []byte, v any) error- 直接从字节解码,跳过Node创建开销DecodeStructFast(data []byte, v any) error- 极速解码,性能关键场景首选
⚡ 内部优化
- 全新的
decodeValueFast()快速解码引擎 - 零拷贝字符串提取优化
- 预分配容量减少内存扩容
- 优化的结构体字段映射缓存
- 智能类型推断和快速路径处理
📊 性能提升
| 解码方法 | 性能提升 | 使用场景 |
|---|---|---|
node.Decode() |
基准 | 需要Node功能时 |
DecodeStruct() |
~1.0x | 直接结构体解码 |
DecodeStructFast() |
~1.1x | 性能关键场景 |
🎯 与标准库对比
- 简单解码:2.1x 速度提升
- 复杂解码:1.25x 速度提升
- 大数据解码:1.27x 速度提升
🔧 使用示例
// 方法1: 标准Node解码
node := fxjson.FromBytes(jsonData)
var user User
err := node.Decode(&user)
// 方法2: 直接解码 (推荐)
var user User
err := fxjson.DecodeStruct(jsonData, &user)
// 方法3: 极速解码 (性能关键)
var user User
err := fxjson.DecodeStructFast(jsonData, &user)
📚 文档更新
- ✅ 完善的API文档和使用示例
- ✅ 性能对比和选择建议
- ✅ 复杂结构体解码演示
- ✅ 错误处理最佳实践
🎯 最佳实践建议
- 高频调用场景使用 DecodeStructFast()
- 需要遍历+解码时使用 node.Decode()
- 一次性解码大量数据时使用 DecodeStruct()
🔄 向后兼容
- ✅ 完全向后兼容,现有代码无需修改
- ✅ 所有原有API保持不变
- ✅ 新增方法作为性能增强选项
---
让JSON解析飞得更快! 🚀
### Git 命令示例
```bash
# 创建带注释的tag
git tag -a v1.2.0 -m "v1.2.0 - High-Performance Decode Optimization
🚀 FxJSON v1.2.0 - 解码性能大幅优化
✨ 新增功能:
- DecodeStruct() - 直接从字节解码
- DecodeStructFast() - 极速解码引擎
- 全面的内部性能优化
📊 性能提升:
- 与标准库对比提升1.2-2.1倍
- 新增方法比原方法提升5-10%
- 零拷贝和预分配优化
🔄 完全向后兼容,现有代码无需修改"🔥 FxJSON v1.0.91
🔥 FxJSON v1.0.8
🎯 新增功能
新增 FloatString() 方法
- 🔢 数字精度保持: 新增
FloatString()方法,完美解决浮点数格式化精度问题 - ✨ 原始格式保持: 直接返回JSON中的原始数字字符串,避免
1.1显示为1.10的问题 - 🚀 零拷贝优化: 高性能实现,直接返回原始字符串,无额外内存分配
使用示例
jsonData := []byte(`{"price": 1.1, "rating": 4.50}`)
node := fxjson.FromBytes(jsonData)
// 保持原始JSON格式
price, _ := node.Get("price").FloatString() // "1.1"
rating, _ := node.Get("rating").FloatString() // "4.50"
// 对比其他方法
floatVal, _ := node.Get("price").Float() // 1.1 (float64)
numStr, _ := node.Get("price").NumStr() // "1.1" (等价方法)
📝 文档更新
README 优化
- 📖 完善文档: 新增"数字精度处理"章节,详细说明各种数字处理方法
- 🎨 视觉优化: 添加 flame.png 图标到项目标题
- 📝 语言调整: 调整描述语言,更加谦逊务实
- 🌍 双语支持: 同步更新中英文版本文档
方法对比表
| 方法 | 用途 | 返回值 | 适用场景 |
|---------------|-------|----------|-----------|
| FloatString() | 显示格式 | 原始JSON格式 | 界面显示,保持精度 |
| NumStr() | 原始字符串 | 数字字符串 | 需要原始格式时 |
| Float() | 数值计算 | float64 | 数学运算 |
| Int() | 整数处理 | int64 | 整数操作 |
🛠️ 技术改进
- 向后兼容: 不影响现有API,完全向后兼容
- 性能优化: 保持原有高性能特性,核心遍历操作零分配
- 内存安全: 继承原有的完整边界检查和安全机制
- Unicode支持: 继续完美支持中文、emoji等Unicode字符
📊 性能数据保持
- ForEach遍历: 20.2x 性能提升
- 数组遍历: 67.5x 性能提升
- 深度遍历: 2.0x 性能提升
- 零内存分配的核心操作
🎉 解决的问题
- ✅ 精度问题: 完美解决 "comments_count": 1.1 显示为 1.10 的问题
- ✅ 格式保持: JSON中 4.50 现在可以准确显示为 4.50 而不是 4.5
- ✅ 易于使用: 简单调用 FloatString() 即可解决所有浮点数显示问题
---
安装方式:
go get github.com/icloudza/fxjson@v1.0.8
感谢所有用户的支持!🚀增加嵌套JSON字符串的智能展开功能
- 新增unescapeJSON函数用于解转义JSON字符串- 实现isValidJSON函数检查字符串是否为有效的JSON
- 递归展开嵌套的JSON字符串,支持对象、数组和字符串类型的展开
- 优化FromBytes函数,支持智能展开嵌套的转义JSON
- 更新相关方法以支持新的展开功能,包括Get、GetPath、Raw等