无法将对象解组为[] uint8类型的Go值

时间:2017-06-06 08:37:09

标签: json go unmarshalling

我是Go的新手。我有以下代码:

package main

import (
    "encoding/json"
    "fmt"
)
func main() {

    byt := []byte(`{"num":6.13,"strs":["a","b"]}`)
    dat := []byte(`{"num":7.13,"strs":["c","d"]}`)
    if err := json.Unmarshal(byt, &dat); err != nil {
        panic(err)
    }
    fmt.Println(dat)

}

获取错误:

  

不能“将对象解组为类型[] uint8”的Go值。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

您有2个JSON输入,并且您正在尝试将其中一个解组到另一个中。这没有任何意义。

使用类型(struct)为您的JSON输入(对象)建模,并将其解组。例如:

type Obj struct {
    Num  float64  `json:"num"`
    Strs []string `json:"strs"`
}

func main() {
    byt := []byte(`{"num":6.13,"strs":["a","b"]}`)

    var obj Obj
    if err := json.Unmarshal(byt, &obj); err != nil {
        panic(err)
    }
    fmt.Println(obj)

}

输出(在Go Playground上尝试):

{6.13 [a b]}

答案 1 :(得分:2)

我认为你打算做这样的事情:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    var dat interface{}
    byt := []byte(`{"num":6.13,"strs":["a","b"]}`)
    if err := json.Unmarshal(byt, &dat); err != nil {
        panic(err)
    }
    fmt.Println(dat)
}

您尝试做的事情毫无意义,因为您正试图将两个JSON对象解组为另一个。

相关问题