1 回复
更多关于Golang JSONQ库发布v2.2版本的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
GoJSONQ v2.2版本为Go开发者提供了一个强大且易用的JSON查询工具。该库允许通过链式方法对JSON数据进行过滤、投影和聚合操作,特别适合处理嵌套或复杂的JSON结构。以下是一些核心功能及代码示例,展示如何利用v2.2版本进行常见操作。
基本用法示例
首先,导入GoJSONQ库并加载JSON数据。假设我们有一个JSON文件或字符串,包含用户信息。
package main
import (
"fmt"
"github.com/thedevsaddam/gojsonq/v2"
)
func main() {
// 示例JSON数据
jsonData := `{
"users": [
{"id": 1, "name": "John", "age": 30, "city": "New York"},
{"id": 2, "name": "Jane", "age": 25, "city": "Los Angeles"},
{"id": 3, "name": "Bob", "age": 35, "city": "Chicago"}
]
}`
// 创建GoJSONQ实例并加载JSON数据
jq := gojsonq.New().FromString(jsonData)
// 查询所有用户
users := jq.From("users").Get()
fmt.Println("All users:", users)
// 重置查询状态以进行新操作
jq.Reset()
// 过滤年龄大于28的用户
filteredUsers := jq.From("users").Where("age", ">", 28).Get()
fmt.Println("Users with age > 28:", filteredUsers)
}
高级查询功能
v2.2版本支持更复杂的查询,如嵌套字段访问、聚合函数和自定义条件。
// 继续使用上面的jsonData
jq.Reset()
// 查询特定城市且年龄小于30的用户
result := jq.From("users").
Where("city", "=", "Los Angeles").
Where("age", "<", 30).
Get()
fmt.Println("Users in Los Angeles under 30:", result)
// 使用OrWhere进行条件组合
jq.Reset()
orResult := jq.From("users").
Where("age", ">", 32).
OrWhere("city", "=", "New York").
Get()
fmt.Println("Users age > 32 or in New York:", orResult)
// 投影:仅选择名称和城市字段
jq.Reset()
projected := jq.From("users").Only("name", "city")
fmt.Println("Only name and city:", projected)
处理嵌套JSON
如果JSON数据包含嵌套对象或数组,GoJSONQ可以轻松查询内部字段。
nestedJSON := `{
"company": "Tech Corp",
"employees": [
{
"id": 1,
"personal": {"name": "Alice", "age": 28},
"department": "Engineering"
},
{
"id": 2,
"personal": {"name": "Charlie", "age": 32},
"department": "Marketing"
}
]
}`
jq := gojsonq.New().FromString(nestedJSON)
// 查询所有员工姓名
names := jq.From("employees").Pluck("personal.name")
fmt.Println("Employee names:", names)
// 过滤特定部门的员工
jq.Reset()
engineeringEmployees := jq.From("employees").Where("department", "=", "Engineering").Get()
fmt.Println("Engineering employees:", engineeringEmployees)
聚合操作
v2.2版本支持求和、计数等聚合函数,便于数据分析。
// 使用初始jsonData示例
jq.Reset()
// 计算用户平均年龄(假设年龄字段为数字)
totalAge := jq.From("users").Sum("age")
count := jq.From("users").Count()
averageAge := totalAge / float64(count)
fmt.Printf("Average age: %.2f\n", averageAge)
// 直接使用库的聚合方法(如果支持)
// 注意:GoJSONQ v2.2的Sum返回float64,Count返回int
jq.Reset()
userCount := jq.From("users").Count()
fmt.Println("Total users:", userCount)
错误处理
在实际应用中,添加错误处理以确保JSON数据有效。
jq := gojsonq.New().File("./data.json") // 从文件加载
if jq.Error() != nil {
fmt.Println("Error loading JSON:", jq.Error())
return
}
result := jq.From("users").Where("age", ">", 25).Get()
if jq.Error() != nil {
fmt.Println("Query error:", jq.Error())
return
}
fmt.Println("Result:", result)
GoJSONQ v2.2通过简洁的API提升了JSON数据处理的效率。开发者可以链式调用方法构建查询,无需手动解析JSON。以上示例覆盖了常见用例,更多高级功能可参考官方文档。


