2 回答
TA贡献1936条经验 获得超6个赞
您可以在左大括号之后立即偏移阅读器,然后json.Decoder
仅用于解码来自阅读器的第一个标记
沿着这些线的东西
sr := strings.NewReader(`{
"ids": [1,2,3]
}`)
for {
b, err := sr.ReadByte()
if err != nil {
fmt.Println(err)
return
}
if b == '{' {
break
}
}
d := json.NewDecoder(sr)
var key string
err := d.Decode(&key)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(key)
此外,您可以包装您io.Reader
从open
with获得的bufio.Reader
信息,以避免多次单字节写入
此解决方案假定内容是一个有效的 JSON 对象。并不是说您无论如何都可以避免这种情况。
TA贡献1810条经验 获得超4个赞
我试过Decoder.Token()
一次读取一个标记,这可以提取您的数组标签:
const jsonStream = `{
"ids": [1,2,3]
}`
dec := json.NewDecoder(strings.NewReader(jsonStream))
t, err := dec.Token()
if err != nil {
log.Fatal(err)
}
fmt.Printf("First token: %v\n", t)
t, err = dec.Token()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Second token (array label): %v\n", t)
- 2 回答
- 0 关注
- 91 浏览
添加回答
举报