第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

有效地確定 JSON 標(biāo)簽

有效地確定 JSON 標(biāo)簽

Go
墨色風(fēng)雨 2023-04-17 16:00:14
我有一堆 JSON 文件,每個(gè)文件都包含大量復(fù)雜數(shù)據(jù)。JSON 文件類似于:ids.json{     "ids": [1,2,3] }名稱.json:{     "names": ["Tyrion","Jaime","Cersei"] }等等。(實(shí)際上,數(shù)組元素是具有 10 個(gè)字段的復(fù)雜結(jié)構(gòu)對(duì)象)我只想提取指定它包含哪種數(shù)組的標(biāo)簽。目前我正在使用encoding/json將整個(gè)文件解組為 amap[string]interface{}并遍歷地圖,但這是一項(xiàng)成本太高的操作。有沒有更快的方法來做到這一點(diǎn),最好不涉及解組整個(gè)數(shù)據(jù)?
查看完整描述

2 回答

?
LEATH

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.Readeropenwith獲得的bufio.Reader信息,以避免多次單字節(jié)寫入

此解決方案假定內(nèi)容是一個(gè)有效的 JSON 對(duì)象。并不是說您無論如何都可以避免這種情況。


查看完整回答
反對(duì) 回復(fù) 2023-04-17
?
蝴蝶不菲

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)


查看完整回答
反對(duì) 回復(fù) 2023-04-17
  • 2 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)