대형 스트림 JSON을 효율적으로 디코딩
거대한 JSON 배열은 한 번에 디코딩할 때 메모리 문제를 일으킬 수 있습니다. 이 문제를 해결하려면 요소를 하나씩 반복하는 스트리밍 접근 방식을 사용하는 것이 좋습니다.
요소별 JSON 요소 스트리밍
encoding/json 패키지는 다음을 제공합니다. JSON 데이터를 스트리밍하는 방법입니다. 예는 다음과 같습니다.
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!"} ]` dec := json.NewDecoder(strings.NewReader(jsonStream)) // skip the opening bracket dec.Token() // read and process each element for dec.More() { var message Message if err := dec.Decode(&message); err != nil { log.Fatal(err) } fmt.Printf("%v: %v\n", message.Name, message.Text) } // skip the closing bracket dec.Token() }
이 코드에서는 json.NewDecoder를 사용하여 JSON 스트림용 디코더를 생성합니다. 그런 다음 여는 괄호와 닫는 괄호({ 및 })를 건너뛰고 dec.More()를 사용하여 스트림을 반복하여 처리할 요소가 더 있는지 확인합니다.
각 요소에 대해 메시지 구조체를 생성합니다. dec.Decode를 사용하여 JSON 데이터를 디코딩합니다. 그런 다음 메시지의 이름 및 텍스트 필드를 인쇄합니다.
이 접근 방식을 사용하면 전체 배열을 메모리에 로드하지 않고도 대규모 JSON 배열을 처리할 수 있으므로 메모리 부족 오류를 방지하고 성능을 향상시킬 수 있습니다.
위 내용은 Go에서 대규모 스트리밍 JSON 데이터를 효율적으로 디코딩하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!