Skip to content

Releases: icloudza/fxjson

fxjson 1.2.4 实现文档中缺失的方法并修复测试问题

Choose a tag to compare

@icloudza icloudza released this 05 Sep 05:41

🎯 主要变更

新增方法

  • 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简化与性能优化版本

Choose a tag to compare

@icloudza icloudza released this 01 Sep 07:47

✨ 主要改进

🎯 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 - 性能优化与功能增强

Choose a tag to compare

@icloudza icloudza released this 18 Aug 05:30

🚀 新功能

  • JSON 序列化功能: 添加完整的 JSON 序列化支持
  • 缓存控制: 新增 DisableCaching 函数,支持禁用全局缓存
  • 安全限制: 增强 JSON 解析的安全选项和限制
  • 调试监控: 添加性能监控和调试功能
  • FloatString 方法: 新增 FloatString API 方法

⚡ 性能优化

  • 缓存算法优化: 使用 CRC32 替代 MD5 生成缓存键,显著提升性能
  • JSON 格式判断: 优化解析前的格式检测逻辑
  • 嵌套展开: 智能处理嵌套 JSON 字符串展开

🛠️ 改进

  • 错误处理: 完善错误类型定义、错误对象创建和上下文信息
  • API 文档: 完善 API 使用文档
  • 基准测试: 添加 JSON 遍历相关的性能基准测试

📈 基准测试

新增多项性能基准测试,确保优化效果可量化验证。

🔥 fxjosn v1.2.1

Choose a tag to compare

@icloudza icloudza released this 16 Aug 08:50

🎯 版本更新概述

  1. 🐛 关键 Bug 修复
  • 修复 IP 地址字符串解析错误 (fxjson.go)
    • 问题:包含多个小数点的字符串(如 "192.168.1.1")被错误识别为数字类型
    • 原因:isValidJSON 函数错误地将数字格式的字符串识别为嵌套 JSON
    • 解决:增强 isValidJSON 函数,只允许 {、[、" 开头的字符串被识别为嵌套 JSON
    • 影响:修复了所有 IP 地址相关的验证功能
  1. ✨ 新增功能

新文件: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
  1. ⚡ 性能优化

缓存键生成优化 (cache.go)

  • 将哈希算法从 MD5 改为 CRC32
  • 性能提升约 3-4 倍
  • 从 crypto/md5 改为 hash/crc32
  1. 🧪 测试增强

新文件: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 - 功能扩展

Choose a tag to compare

@icloudza icloudza released this 15 Aug 12:13

🚀 版本亮点

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

Choose a tag to compare

@icloudza icloudza released this 15 Aug 11:17

🔧 主要修复

  1. 空字符串 Panic 问题(严重)
    - 修复了 unsafe.String(&strBytes[0], len(strBytes)) 的空切片访问问题
    - 现在空字符串会被安全处理
  2. 输入验证增强
    - 新增 ParseOptions 支持安全限制
    - 默认限制:最大1000层嵌套、1MB字符串、10k对象键等
    - 严格模式拒绝格式错误的 JSON
  3. 内存统计修复
    - 创建安全的内存统计工具
    - 防止整数溢出和异常值

v1.1.0 - High-Performance Decode Optimization

Choose a tag to compare

@icloudza icloudza released this 15 Aug 05:50

🚀 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

Choose a tag to compare

@icloudza icloudza released this 14 Aug 12:12

修正错误

🔥 FxJSON v1.0.8

Choose a tag to compare

@icloudza icloudza released this 14 Aug 11:56

🎯 新增功能

新增 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字符串的智能展开功能

Choose a tag to compare

@icloudza icloudza released this 13 Aug 13:29
  • 新增unescapeJSON函数用于解转义JSON字符串- 实现isValidJSON函数检查字符串是否为有效的JSON
  • 递归展开嵌套的JSON字符串,支持对象、数组和字符串类型的展开
  • 优化FromBytes函数,支持智能展开嵌套的转义JSON
  • 更新相关方法以支持新的展开功能,包括Get、GetPath、Raw等