我试图解组的部分JSON有一个可以包含字符串或整数的数组。我将如何解析这个?
{
"id": "abc",
"values": [1,2,3]
},
{
"id": "def",
"values": ["elephant", "tomato", "arrow"]
},
{
//etc...
}
我尝试了以下内容:
type Thing struct {
ID string `json:"id"`
Values []string `json:"values,string,omitempty"`
}
收到以下错误:
panic: json: cannot unmarshal array into Go struct field Thing.values of type string
答案 0 :(得分:0)
您可以将字段值的类型设置为[] interface {},但您可能必须使用某些类型的断言。
以下是我使用您提供的数据的操场的链接:https://play.golang.org/p/ahePgggr8o1
我会在这里粘贴代码:
package main
import (
"fmt"
"encoding/json"
)
type Thing struct {
ID string `json:"id"`
Values []interface{} `json:"values,omitempty"`
}
func print(values []interface{}) {
for _, v := range values{
switch value := v.(type){
case string:
fmt.Println("String", value)
case int:
fmt.Println("Integer", value)
case float64:
fmt.Println("Floats", value)
default:
fmt.Printf("I don't know about type %T!\n", v)
}
}
}
func main() {
var t1, t2 Thing
data := []byte("{ \"id\": \"abc\", \"values\": [1,2,3]}")
data2 := []byte("{ \"id\": \"def\", \"values\": [\"elephant\", \"tomato\", \"arrow\"]}")
_ = json.Unmarshal(data, &t1)
_ = json.Unmarshal(data2, &t2)
print(t1.Values)
print(t2.Values)
}