首頁 >後端開發 >Golang >如何在不將整個物件載入記憶體的情況下編組 JSON 流?

如何在不將整個物件載入記憶體的情況下編組 JSON 流?

Barbara Streisand
Barbara Streisand原創
2024-10-28 19:16:29440瀏覽

 How to Marshal JSON Streams Without Loading the Entire Object in Memory?

在不載入整個物件的情況下封送JSON 流

您的目標是對大型資料流進行編碼,而不將整個流保留在記憶體中。雖然 JSON 是一種常見的資料格式,但標準函式庫的 json.Marshaler 介面並未提供實現此目的的直接方法。

自訂字串建立

目前,您可以使用 WriteString 手動建構 JSON 字串,鑑於缺乏內建功能,這是合理的方法。這個方法可以確保你一次只處理小塊資料。

修改encoding/json

如果你願意修改encoding/json包,你可以修補reflectValueQuoted函數以將通道作為數組處理。這將允許您遍歷通道並在它們變得可用時對其值進行編碼,而無需緩衝整個流。

程式碼修補範例

這是編碼的修改版本/您可以使用的json 程式碼:

<code class="go">// Inside switch:
case reflect.Chan:
    e.WriteByte('[')
    i := 0
    for {
        x, ok := v.Recv()
        if !ok {
            break
        }
        if i > 0 {
            e.WriteByte(',')
        }
        e.reflectValue(x)
        i++
    }
    e.WriteByte(']')</code>

結論結論

結論

結論

結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論在不載入整個資料的情況下編組JSON 流的唯一目前選項是按照您的方式手動建構字串目前正在做或修改encoding/json包。修改包需要對內部實現有一定的了解,應該慎重考慮。

以上是如何在不將整個物件載入記憶體的情況下編組 JSON 流?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn