解组不同类型的数组
Unmarshal array of different types
我有一个有效的 JSON 字符串需要解组,但该数组很难适合解组的结构,我不知道该怎么做。它看起来有点像这样:
[
[ "name", "contains", "test" ],
"and",
[ "group", "=", "123" ],
"and",
[
[
"date", ">=", "2020-06-30T23:00:00Z"
],
"and",
[
"date", "<", "2020-07-31T23:00:00Z"
]
]
]
它也可以有更深的数组。
到目前为止我尝试的是
f := r.URL.Query().Get("filter")
var dat []map[string]interface{}
// Also failed with: dat := make([]map[string]interface{}, 100)
if err := json.Unmarshal([]byte(f), &dat); err != nil {
panic(err)
}
而且错误总是一样的panic: json: cannot unmarshal array into Go value of type map[string]interface {}
由于您的 json 数据很复杂,您不能将其定义为 struct 或任何类型,所以我通常只尝试 interface{}
.
在您的情况下,json 数据中的数组内容不是键值结构。因此你不能将它解组为 map[string]interface{}
的数组。所以,试试这个。
var jsonStr = `
[
[ "name", "contains", "test" ],
"and",
[ "group", "=", "123" ],
"and",
[
[
"date", ">=", "2020-06-30T23:00:00Z"
],
"and",
[
"date", "<", "2020-07-31T23:00:00Z"
]
]
]
`
func main() {
var data interface{}
if err := json.Unmarshal([]byte(jsonStr), &data); err != nil {
panic(err)
}
fmt.Println(data)
}
示例:https://play.golang.org/p/fC8XVvHutzm
我经常用https://mholt.github.io/json-to-go/把json转成结构体
我有一个有效的 JSON 字符串需要解组,但该数组很难适合解组的结构,我不知道该怎么做。它看起来有点像这样:
[
[ "name", "contains", "test" ],
"and",
[ "group", "=", "123" ],
"and",
[
[
"date", ">=", "2020-06-30T23:00:00Z"
],
"and",
[
"date", "<", "2020-07-31T23:00:00Z"
]
]
]
它也可以有更深的数组。
到目前为止我尝试的是
f := r.URL.Query().Get("filter")
var dat []map[string]interface{}
// Also failed with: dat := make([]map[string]interface{}, 100)
if err := json.Unmarshal([]byte(f), &dat); err != nil {
panic(err)
}
而且错误总是一样的panic: json: cannot unmarshal array into Go value of type map[string]interface {}
由于您的 json 数据很复杂,您不能将其定义为 struct 或任何类型,所以我通常只尝试 interface{}
.
在您的情况下,json 数据中的数组内容不是键值结构。因此你不能将它解组为 map[string]interface{}
的数组。所以,试试这个。
var jsonStr = `
[
[ "name", "contains", "test" ],
"and",
[ "group", "=", "123" ],
"and",
[
[
"date", ">=", "2020-06-30T23:00:00Z"
],
"and",
[
"date", "<", "2020-07-31T23:00:00Z"
]
]
]
`
func main() {
var data interface{}
if err := json.Unmarshal([]byte(jsonStr), &data); err != nil {
panic(err)
}
fmt.Println(data)
}
示例:https://play.golang.org/p/fC8XVvHutzm
我经常用https://mholt.github.io/json-to-go/把json转成结构体