无法解组数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法解组数组相关的知识,希望对你有一定的参考价值。

有这个json文件:

    {
  "colors": [
    ["#7ad9ab", "#5ebd90", "#41a277", "#21875e", "#713517"],
    ["#5ebd90", "#41a277", "#21875e", "#006d46", "#561e00"],
    ["#005430"]
  ]
}

这段代码:

type Palette struct {
    Colors []string
}

func TestStuff(t *testing.T) {
    c, err := os.Open("palette.json")
    if err != nil {
        fmt.Printf("Error: %v", err.Error())
    }
    defer c.Close()
    bc, _ := ioutil.ReadAll(c)
    var palette []Palette //also tried with Palette

    err = json.Unmarshal(bc, &palette)
    if err != nil {
        fmt.Printf("Error: %v 
", err.Error())
    }
    fmt.Printf("Data: %v", palette)

}

并继续得到:

错误:json:无法将数组解组为Go结构字段Palette.Colors类型为string

或类似,如果我更改调色板类型。提示?谢谢!

答案

您的JSON blob在“colors”元素中有一个嵌套数组,因此您需要在Palette结构中嵌套颜色数组。修改Palette的声明以使Colors类型的[][]string解决了这个问题:

type Palette struct {
    Colors [][]string
}

Playground link

另一答案

你的json有[] []字符串,你没有指定json属性名:

package main

import (
    "encoding/json"
    "fmt"
)

type Palette struct {
    Colors [][]string `json:"colors"`
}

func main() {
    jsonStr := `{
  "colors": [
    ["#7ad9ab", "#5ebd90", "#41a277", "#21875e", "#713517"],
    ["#5ebd90", "#41a277", "#21875e", "#006d46", "#561e00"],
    ["#005430"]
  ]
}`
    var palette Palette
    err := json.Unmarshal([]byte(jsonStr),&palette)
    if err != nil {
        fmt.Printf("Error: %v 
", err.Error())
    }
    fmt.Printf("Data: %v", palette)
}

Here is a link to playground sample

以上是关于无法解组数组的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Jersey 客户端解组 JSON 对象数组

Parceable 错误:在偏移量 1112 处解组未知类型代码 7274595

将 json 数组解组为 go struct(数组在 JSON 字符串的中间

如何正确解组不同类型的数组?

如何使用 spring 集成 dsl 解组 xml

如何调试 JAXB 解组?