Golang JSONQ库发布v2.2版本

Golang JSONQ库发布v2.2版本 GOJSONQ v2.2

功能特性:

06%20AM

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。以上示例覆盖了常见用例,更多高级功能可参考官方文档

回到顶部