亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將非常大的 json 解碼為結構數組

將非常大的 json 解碼為結構數組

Go
BIG陽 2023-06-01 18:02:47
我有一個具有 REST API 的 Web 應用程序,獲取 JSON 作為輸入并執行此 JSON 的轉換。這是我的代碼:func (a *API) getAssignments(w http.ResponseWriter, r *http.Request) {   var document DataPacket   err := json.NewDecoder(r.Body).Decode(&document)   if err != nil {       a.handleJSONParseError(err, w)      return   }   // transformations我得到的 JSON 是結構的集合。外部應用程序使用我的應用程序并向我發送非常大的 json 文件(300-400MB)。一次解碼這個 json 需要非常多的時間和內存量。有什么方法可以將這個 json 作為流處理,并從這個集合中一個一個地解碼結構?
查看完整描述

1 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

首先,閱讀文檔。


打包json

導入“編碼/json”

func (*解碼器) 解碼

func?(dec?*Decoder)?Decode(v?interface{})?error

Decode 從其輸入中讀取下一個 JSON 編碼值并將其存儲在 v 指向的值中。

package main


import (

? ? "encoding/json"

? ? "fmt"

? ? "log"

? ? "strings"

)


func main() {

? ? const jsonStream = `

? ? [

? ? ? ? {"Name": "Ed", "Text": "Knock knock."},

? ? ? ? {"Name": "Sam", "Text": "Who's there?"},

? ? ? ? {"Name": "Ed", "Text": "Go fmt."},

? ? ? ? {"Name": "Sam", "Text": "Go fmt who?"},

? ? ? ? {"Name": "Ed", "Text": "Go fmt yourself!"}

? ? ]

`

? ? type Message struct {

? ? ? ? Name, Text string

? ? }

? ? dec := json.NewDecoder(strings.NewReader(jsonStream))


? ? // read open bracket

? ? t, err := dec.Token()

? ? if err != nil {

? ? ? ? log.Fatal(err)

? ? }

? ? fmt.Printf("%T: %v\n", t, t)


? ? // while the array contains values

? ? for dec.More() {

? ? ? ? var m Message

? ? ? ? // decode an array value (Message)

? ? ? ? err := dec.Decode(&m)

? ? ? ? if err != nil {

? ? ? ? ? ? log.Fatal(err)

? ? ? ? }


? ? ? ? fmt.Printf("%v: %v\n", m.Name, m.Text)

? ? }


? ? // read closing bracket

? ? t, err = dec.Token()

? ? if err != nil {

? ? ? ? log.Fatal(err)

? ? }

? ? fmt.Printf("%T: %v\n", t, t)


}


查看完整回答
反對 回復 2023-06-01
  • 1 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號