duanfen2349 2018-06-05 13:22
浏览 492
已采纳

如何解组不同数据类型的JSON数组?

Part of the JSON I'm trying to unmarshal has an array that can contain either strings or ints. How would I go about parsing this?

{
    "id": "abc",
    "values": [1,2,3]
},
{
    "id": "def",
    "values": ["elephant", "tomato", "arrow"]
},
{
    //etc...
}

I tried the following:

type Thing struct {
    ID      string   `json:"id"`
    Values  []string `json:"values,string,omitempty"`
}

Get the following error:

panic: json: cannot unmarshal array into Go struct field Thing.values of type string
  • 写回答

1条回答 默认 最新

  • duanduan8439 2018-06-05 15:04
    关注

    You can set the type of the field Values to []interface{}, but you might have to use some type assertions.

    Here is a link to a playground where I use the data you provided: https://play.golang.org/p/ahePgggr8o1

    I will paste the code here anyways:

    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!
    ", 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)
    }   
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值