Skip to content

Instantly share code, notes, and snippets.

@slifer2015
Created February 4, 2019 11:12
Show Gist options
  • Save slifer2015/fa5bddcc7f8821e8e07ba62d51efae7b to your computer and use it in GitHub Desktop.
Save slifer2015/fa5bddcc7f8821e8e07ba62d51efae7b to your computer and use it in GitHub Desktop.
tree
package main
import (
"encoding/json"
"fmt"
)
var a = `{
"query":{
"bool":{
"filter":[
{
"bool":{
"must_not":{
"match":{
"vendorType":{
"query":"SUPERMARKET"
}
}
}
}
},
{
"bool":{
"should":[
{
"nested":{
"inner_hits":{
"from":0,
"name":"vendorImages",
"size":4,
"sort":[
{
"vendorImages.userType.keyword":{
"order":"desc"
}
}
]
},
"path":"vendorImages",
"query":{
"match_all":{
}
}
}
}
]
}
}
]
}
}
}`
func main() {
var res map[string]interface{}
json.Unmarshal([]byte(a), &res)
queryData, _ := res["query"]
//fmt.Println(queryData)
queryDataMap, _ := queryData.(map[string]interface{})
queryDataBool, _ := queryDataMap["bool"]
queryDataBoolMap, _ := queryDataBool.(map[string]interface{})
filterArr := queryDataBoolMap["filter"]
//fmt.Println(filterArr)
parse(filterArr, "")
//fmt.Println(ref)
for i := range ref {
fmt.Println(ref[i])
}
}
var ref = make([]string, 0)
func parse(tree interface{}, s string) {
sliceTree, ok := tree.([]interface{})
if ok {
for i := range sliceTree {
parse(sliceTree[i], s)
}
} else {
data, ok := tree.(map[string]interface{})
if ok {
for i := range data {
s += i + "_"
parse(data[i], s)
}
} else {
treeStr, ok := tree.(string)
if ok {
s += treeStr
ref = append(ref, s)
return
}
treeInt, ok := tree.(int64)
if ok {
s = fmt.Sprintf("%s%d", s, treeInt)
ref = append(ref, s)
return
}
treeFloat, ok := tree.(float64)
if ok {
s = fmt.Sprintf("%s%f", s, treeFloat)
ref = append(ref, s)
return
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment