如何将JSON解析为数据结构

时间:2015-11-25 09:14:46

标签: json parsing go

我正在尝试解析类型为

的JSON
"{\"ids\":[\"a\",\"b\"]}"

这是我的代码:

package main

import "fmt"
import "encoding/json"
import "strings"

type Idlist struct {
    id []string `json:"ids"`
}
func main() {
    var val []byte = []byte(`"{\"ids\":[\"a\",\"b\"]}"`)
    jsonBody, _ := strconv.Unquote(string(val))

    var holder Idlist
    if err := json.NewDecoder(strings.NewReader(jsonBody)).Decode(&holder); err!= nil{
        fmt.Print(err)
    }
    fmt.Print(holder)
    fmt.Print(holder.id)
}

然而,我一直在获得输出

{[]}[]

我无法获取结构中的数据。 我哪里错了?这是游乐场链接:https://play.golang.org/p/82BaUlfrua

2 个答案:

答案 0 :(得分:1)

您的结构必须如下所示:

type Idlist struct {
    Id []string `json:"ids"`
}

Golang认为以大写字母开头的字段是公开的。因此,您的字段对json解码器不可见。有关详细信息,请查看此帖子: Why Golang cannot generate json from struct with front lowercase character?

答案 1 :(得分:0)

以下是您解决问题的示例:http://play.golang.org/p/id4f4r9tEr

您可能需要在字符串上使用strconv.Unquote

这可能是重复的:How to unmarshal an escaped JSON string in Go?

已解决https://play.golang.org/p/hAShmfDUA_

type Idlist struct {
    Id []string `json:"ids"`
}