基于gjson,递归获取全部key的路径

This commit is contained in:
2024-11-27 16:07:32 +08:00
parent d115e1c5ba
commit 435edb0ea3
3 changed files with 247 additions and 0 deletions

94
gjson_hack/path_test.go Normal file
View File

@ -0,0 +1,94 @@
// Package gjson_hack ...
//
// Description : gjson_hack ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2024-11-27 15:52
package gjson_hack
import (
"encoding/json"
"fmt"
"testing"
)
func TestPath(t *testing.T) {
mapData := map[string]any{
"person_list": []map[string]any{
{"name": "zhang", "age": 10},
{"name": "li", "age": 20},
{"name": "wang", "age": 30},
},
"company_info": map[string]any{
"address": "Beijing",
"email": "xxx@xxx.com",
},
"sex": "man",
}
byteData, _ := json.Marshal(mapData)
pathRes, err := Path(string(byteData), nil)
if nil != err {
fmt.Println(err.Error())
} else {
for _, item := range pathRes.List {
fmt.Println(item)
}
}
}
func TestPathOnlyFinallyPath(t *testing.T) {
mapData := map[string]any{
"person_list": []map[string]any{
{"name": "zhang", "age": 10},
{"name": "li", "age": 20},
{"name": "wang", "age": 30},
},
"company_info": map[string]any{
"address": "Beijing",
"email": "xxx@xxx.com",
},
"sex": "man",
}
byteData, _ := json.Marshal(mapData)
pathRes, err := Path(string(byteData), &PathOption{
UnfoldArray: false,
MaxDeep: 0,
OnlyFinalPath: true,
})
if nil != err {
fmt.Println(err.Error())
} else {
for _, item := range pathRes.List {
fmt.Println(item)
}
}
}
func TestPathOnlyFinallyPathWithUnfoldArray(t *testing.T) {
mapData := map[string]any{
"person_list": []map[string]any{
{"name": "zhang", "age": 10},
{"name": "li", "age": 20},
{"name": "wang", "age": 30},
},
"company_info": map[string]any{
"address": "Beijing",
"email": "xxx@xxx.com",
},
"sex": "man",
}
byteData, _ := json.Marshal(mapData)
pathRes, err := Path(string(byteData), &PathOption{
UnfoldArray: true,
MaxDeep: 0,
OnlyFinalPath: false,
})
if nil != err {
fmt.Println(err.Error())
} else {
for _, item := range pathRes.List {
fmt.Println(item)
}
}
}