如何在Golang中反序列化一个带有匿名数组的json?[duplicate]

x759pob2  于 2023-02-14  发布在  Go
关注(0)|答案(1)|浏览(93)
    • 此问题在此处已有答案**:

Go json array of arrays(1个答案)
2天前关闭。
我从外部服务器接收此json:
[["010117"、"070117"、"080117"]、["080117"、"140117"、"150117"]、["150117"、"210117"、"220117"]
我需要解析它

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "os"
    "runtime"
)

type Range struct {
    From string
    To   string
    Do   string
}

type AllRanges struct {
    Ranges []Range
}

func main() {
    var ranges AllRanges
    j, err := os.ReadFile(file)

    if err != nil {
        panic("Can't read json file")
    }

    if json.Unmarshal(j, &v) != nil {
        panic("Error reading the json")
    }
}

当我执行时,会抛出一个异常,指示读取json时出错
先谢了!

js81xvg6

js81xvg61#

1.这不是失败的代码。你发布的代码无法编译,因为它试图解组到一个未声明的变量v中。
1.假设v应该是ranges,那么问题就非常简单了......
ranges是类型AllRanges,其是具有命名成员Ranges的结构体,Ranges是也具有命名成员的结构体数组。
因此,当试图将json解组到此结构体中时,解组器将期望找到:

{
   "Ranges": [
        { 
           "From": "..",
           "To": ..,
           "Do": ".."
        },
        { etc }
   ]
}

要解组由字符串数组的匿名数组组成的数据,需要将ranges声明为字符串数组的数组:

var ranges [][]string

    ...

    if json.Unmarshal(j, &ranges) != nil {
        panic("Error reading the json")
    }

一旦您将数组解组为这个数组的数组,您就需要编写代码将其转换为所需的结构化值。
这个playground演示了如何成功地将示例数据解组到一个[][]string中,转换过程留待练习。

相关问题