>  기사  >  백엔드 개발  >  메모리에 전체 개체를 로드하지 않고 JSON 스트림을 마샬링하는 방법은 무엇입니까?

메모리에 전체 개체를 로드하지 않고 JSON 스트림을 마샬링하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-28 19:16:29347검색

 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 스트림을 마샬링하는 유일한 현재 옵션은 문자열을 수동으로 구성하는 것입니다. 현재 인코딩/json 패키지를 수행 중이거나 수정하고 있습니다. 패키지를 수정하려면 내부 구현에 대한 지식이 필요하므로 신중하게 고려해야 합니다.

위 내용은 메모리에 전체 개체를 로드하지 않고 JSON 스트림을 마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.