【问题标题】:How to parse JSON into data structure如何将 JSON 解析为数据结构
【发布时间】:2015-11-25 09:14:46
【问题描述】:

我正在尝试解析 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

【问题讨论】:

标签: json parsing go


【解决方案1】:

你的结构必须看起来像:

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

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

【讨论】:

    【解决方案2】:

    这是解决问题的示例: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"`
    }
    

    【讨论】:

    • 您引用的示例是一个入门示例。并不是说我的更难。我特意在寻找json中有数组的情况。您能否指出我的方法中的错误。为了您的方便,我附上了带有代码的 go playground 链接。提前感谢您的时间。欣赏它。
    • 用您的提示和新的 go playground 链接更新了问题。
    • 哥们,你甚至对 golang 一无所知。你为什么要破坏我的问题?
    • 感谢您的评论,这是真的,我不知道 Go lang,但我已经解决了您的问题。问题出在您的结构中,您不能使用小写字母。 play.golang.org/p/hAShmfDUA_ 现在可以了
    • 很酷,谢谢。你太棒了。很抱歉措辞严厉。我花了几个小时在这个愚蠢的事情上,研究了整个解析过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多