在不載入整個物件的情況下封送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中文網其他相關文章!