我正在尝试解压缩具有接口类型的数据。因此,我需要将接口类型转换为[]byte,并将其传递给解组。我试过了
err := json.Unmarshal([]byte(kpi), &a) =>失败[]byte,请使用
kpidata, res := kpi.([]byte) =>失败,kpidata是nil我们有什么办法可以改变它吗?
发布于 2018-02-27 10:50:04
在您的示例代码中,data应该是JSON编码的(在简单的word 字符串中),所以您使用Unmarshal的方式是错误的:
//解编组解析JSON编码的数据,并将结果//存储在v.所指向的值中,如果v为0或不是指针,// Un堵an将返回一个InvalidUnmarshalError。函数解组(数据[]字节,v接口{})错误
在围棋游乐场和[]string{"art", "football"}上试一试
package main
import (
"encoding/json"
"fmt"
)
func main() {
// ********************* Marshal *********************
u := map[string]interface{}{}
u["name"] = "kish"
u["age"] = 28
u["work"] = "engine"
//u["hobbies"] = []string{"art", "football"}
u["hobbies"] = "art"
b, err := json.Marshal(u)
if err != nil {
panic(err)
}
fmt.Println(string(b))
// ********************* Unmarshal *********************
var a interface{}
err = json.Unmarshal(b, &a)
if err != nil {
fmt.Println("error:", err)
}
fmt.Println(a)
}产出:
{"age":28,"hobbies":"art","name":"kish","work":"engine"}
map[name:kish work:engine age:28 hobbies:art]您想要解组 it,所以尝试这简单工作示例([]byte(kpi.(string))):
package main
import (
"encoding/json"
"fmt"
)
func main() {
var kpi interface{} = st
var a []Animal
err := json.Unmarshal([]byte(kpi.(string)), &a)
if err != nil {
fmt.Println("error:", err)
}
fmt.Println(a)
}
type Animal struct {
Name string
Order string
}
var st = `[
{"Name": "Platypus", "Order": "Monotremata"},
{"Name": "Quoll", "Order": "Dasyuromorphia"}
]`产出:
[{Platypus Monotremata} {Quoll Dasyuromorphia}]工作示例使用([]byte(*kpi.(*string))):
package main
import (
"encoding/json"
"fmt"
)
func main() {
var kpi interface{} = &st
var a []Animal
err := json.Unmarshal([]byte(*kpi.(*string)), &a)
if err != nil {
fmt.Println("error:", err)
}
fmt.Println(a)
}
type Animal struct {
Name string
Order string
}
var st = `[
{"Name": "Platypus", "Order": "Monotremata"},
{"Name": "Quoll", "Order": "Dasyuromorphia"}
]`package main
import (
"encoding/json"
"fmt"
)
func main() {
u := map[string]interface{}{}
u["1"] = "one"
b, err := json.Marshal(u)
if err != nil {
panic(err)
}
fmt.Println(string(b))
}产出:
{"1":"one"}我希望这能帮到你。
https://stackoverflow.com/questions/49006594
复制相似问题