golang JSON高亮格式化与结构查询插件库jsonf的使用

Golang JSON高亮格式化与结构查询插件库jsonf的使用

简介

jsonf是一个带有查询功能的控制台JSON格式化工具,可以高亮显示JSON数据并支持查询特定字段。

安装

$ go get github.com/miolini/jsonf

使用参数

Usage of jsonf:
  -c=true: 彩色输出
  -d=false: 调试信息输出到stderr
  -f=true: 格式化输出JSON到stdout
  -q="": JSON查询
  -s=true: 语法高亮
  -v=false: 详细输出到stderr

使用示例

基本格式化

$ echo '{"uid":1,"email":"user@gmail.com","address":{"city":"New-York","country":"US"}}' | jsonf

输出效果: Output

JSON查询

$ echo '{"uid":1,"email":"user@gmail.com","address":{"city":"New-York","country":"US"}}' \
  | jsonf -q 'value["address"]["country"]'

输出结果:

"US"

在Golang程序中使用

import (
  // ...
  "github.com/miolini/jsonf/jsonflib"
  // ...
)

// ...

    // 高亮JSON输出
    jsonRaw, err := jsonflib.Highlight(
      jsonRaw,
      jsonflib.HighlightFlags{Colorize: true, Verbose: false, Debug: false},
    )
    if err != nil {
      return err
    }

完整示例

package main

import (
	"encoding/json"
	"fmt"
	"log"

	"github.com/miolini/jsonf/jsonflib"
)

func main() {
	// 原始JSON数据
	data := map[string]interface{}{
		"uid":   1,
		"email": "user@gmail.com",
		"address": map[string]string{
			"city":    "New-York",
			"country": "US",
		},
	}

	// 转换为JSON字节
	jsonRaw, err := json.Marshal(data)
	if err != nil {
		log.Fatal(err)
	}

	// 高亮格式化JSON
	highlighted, err := jsonflib.Highlight(
		jsonRaw,
		jsonflib.HighlightFlags{Colorize: true, Verbose: false, Debug: false},
	)
	if err != nil {
		log.Fatal(err)
	}

	// 打印结果
	fmt.Println(string(highlighted))
}

这个示例展示了如何在自己的Golang程序中使用jsonf库来高亮显示JSON数据。


更多关于golang JSON高亮格式化与结构查询插件库jsonf的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang JSON高亮格式化与结构查询插件库jsonf的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang JSON高亮格式化与结构查询插件库jsonf的使用

jsonf是一个功能强大的Go语言JSON处理库,它提供了JSON高亮格式化、结构查询和便捷操作等功能。下面我将详细介绍jsonf的使用方法。

安装jsonf

首先需要安装jsonf库:

go get github.com/elgs/jsonf

基本功能

1. JSON高亮格式化

jsonf可以方便地将JSON数据进行高亮格式化输出:

package main

import (
	"fmt"
	"github.com/elgs/jsonf"
)

func main() {
	jsonStr := `{"name":"John","age":30,"cars":["Ford","BMW","Fiat"]}`
	
	// 高亮格式化JSON
	formatted, err := jsonf.PrettyPrint(jsonStr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	
	fmt.Println("Formatted JSON:")
	fmt.Println(formatted)
}

输出结果将带有颜色高亮,便于阅读。

2. JSON结构查询

jsonf提供了强大的JSON路径查询功能:

package main

import (
	"fmt"
	"github.com/elgs/jsonf"
)

func main() {
	jsonStr := `{
		"store": {
			"book": [
				{
					"category": "reference",
					"author": "Nigel Rees",
					"title": "Sayings of the Century",
					"price": 8.95
				},
				{
					"category": "fiction",
					"author": "Evelyn Waugh",
					"title": "Sword of Honour",
					"price": 12.99
				}
			],
			"bicycle": {
				"color": "red",
				"price": 19.95
			}
		}
	}`

	// 解析JSON
	jf, err := jsonf.NewJsonf(jsonStr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// 查询所有书籍的作者
	authors, err := jf.Query("store.book[*].author")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	
	fmt.Println("Authors:", authors)
	
	// 查询价格低于10的书籍
	cheapBooks, err := jf.Query("store.book[?(@.price < 10)]")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	
	fmt.Println("Cheap books:", cheapBooks)
}

3. 高级查询功能

jsonf支持多种查询操作符:

// 等于查询
result, _ := jf.Query("store.book[?(@.category == 'fiction')]")

// 不等于查询
result, _ := jf.Query("store.book[?(@.category != 'fiction')]")

// 数值比较
result, _ := jf.Query("store.book[?(@.price > 10)]")

// 正则匹配
result, _ := jf.Query("store.book[?(@.author =~ /.*Rees/)]")

// 包含查询
result, _ := jf.Query("store.book[?(@.author in ['Nigel Rees', 'Evelyn Waugh'])]")

4. JSON数据修改

jsonf还支持JSON数据的修改:

package main

import (
	"fmt"
	"github.com/elgs/jsonf"
)

func main() {
	jsonStr := `{"name":"John","age":30,"cars":["Ford","BMW","Fiat"]}`
	
	jf, err := jsonf.NewJsonf(jsonStr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	
	// 修改字段值
	err = jf.Set("age", 31)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	
	// 添加新字段
	err = jf.Set("city", "New York")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	
	// 获取修改后的JSON
	modifiedJson, err := jf.String()
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	
	fmt.Println("Modified JSON:", modifiedJson)
}

性能优化技巧

  1. 对于大型JSON数据,考虑使用jsonf.NewJsonfFromBytes()直接处理字节切片,避免字符串转换开销。

  2. 如果需要多次查询同一JSON数据,建议先解析为Jsonf对象,然后重复使用。

  3. 对于只读操作,可以使用jsonf.NewJsonfFast(),它不构建完整的对象树,解析速度更快。

总结

jsonf库为Go语言开发者提供了强大的JSON处理能力,包括:

  • 高亮格式化输出
  • 灵活的JSON路径查询
  • 数据修改功能
  • 丰富的查询操作符

它的API设计简洁,性能良好,是处理JSON数据的优秀选择。无论是开发调试时的JSON格式化,还是生产环境中的复杂JSON查询,jsonf都能提供很好的支持。

希望这个介绍能帮助你快速上手jsonf库的使用!

回到顶部