대규모 데이터를 위한 JSON 배열 스트리밍
대량 JSON 배열을 메모리로 디코딩하는 것은 문제가 될 수 있으며, 이로 인해 메모리 문제가 발생할 수 있습니다. 이 문제를 해결하려면 JSON 요소 스트리밍이 더 효율적인 솔루션입니다.
Go의 인코딩/json 패키지는 JSON 데이터 요소를 요소별로 스트리밍하기 위한 메커니즘을 제공합니다. 확장된 예는 다음과 같습니다.
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 the opening bracket. t, err := dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) // Loop through the array elements. for dec.More() { var m Message // Decode the current element. err = dec.Decode(&m) if err != nil { log.Fatal(err) } fmt.Printf("%v: %v\n", m.Name, m.Text) } // Read the closing bracket. t, err = dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) }
이 예에서는 JSON 배열의 여는 괄호와 닫는 괄호를 명시적으로 처리하고 각 요소를 개별적으로 디코딩하여 메모리 오버헤드 없이 JSON 데이터를 효율적으로 스트리밍할 수 있습니다.
위 내용은 Go에서 대규모 JSON 배열을 효율적으로 스트리밍하고 디코딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!