2 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以在左大括號(hào)之后立即偏移閱讀器,然后json.Decoder
僅用于解碼來自閱讀器的第一個(gè)標(biāo)記
沿著這些線的東西
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
信息,以避免多次單字節(jié)寫入
此解決方案假定內(nèi)容是一個(gè)有效的 JSON 對(duì)象。并不是說您無論如何都可以避免這種情況。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
我試過Decoder.Token()
一次讀取一個(gè)標(biāo)記,這可以提取您的數(shù)組標(biāo)簽:
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 關(guān)注
- 140 瀏覽
添加回答
舉報(bào)