2 回答

TA贡献1875条经验 获得超5个赞
不幸的是,您只能使用range“数组、切片、字符串或映射,或从通道读取”(参见有效 go)
要在解码时迭代结构,文档建议执行以下操作:
dec := json.NewDecoder(strings.NewReader(jsonStream))
for {
var m Message
if err := dec.Decode(&m); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
fmt.Printf("%s: %s\n", m.Name, m.Text)
}

TA贡献1856条经验 获得超17个赞
Ajson.Decoder是一个结构体,在 Go 中,您只能迭代(使用range)字符串、切片/数组、映射和通道(https://golang.org/ref/spec#For_statements)。
但是,您可以循环遍历所有 JSON 编码的值io.Reader:
func main() {
s := `"a string"
72
["an", "array"]
{"an": "object"}
`
dec := json.NewDecoder(strings.NewReader(s))
for {
var v interface{}
if err := dec.Decode(&v); err != nil {
if err == io.EOF {
break
}
log.Fatal(err)
}
log.Print(v)
}
}
http://play.golang.org/p/flqXlcx_6B
编辑:虽然More似乎对本例中的值有效,但这不是它的预期用途(基于 godoc),因此检查 err == io.EOF 会更好。更新了代码片段。
- 2 回答
- 0 关注
- 255 浏览
添加回答
举报