«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как мы можем передавать большие данные в JSON без загрузки всех объектов в память?

Как мы можем передавать большие данные в JSON без загрузки всех объектов в память?

Опубликовано 7 ноября 2024 г.
Просматривать:385

How Can We Stream Large Data to JSON Without Loading All Objects into Memory?

Кодирование больших потоков данных с помощью MarshalJSON без загрузки всех объектов в памяти

Хотение закодировать большой поток данных с помощью json.Encoder без загрузки все это в память сразу - обычная проблема. К сожалению, пакет кодирования/json не обеспечивает прямой поддержки этого.

Текущий обходной путь

Текущее решение, как вы упомянули, состоит в том, чтобы вручную создать строку JSON. сам. Это предполагает написание структуры JSON по частям по мере того, как данные становятся доступными из потока. Это эффективный подход, но он может быть утомительным и подверженным ошибкам.

Предлагаемое исправление

Чтобы улучшить этот процесс, можно изменить пакет кодирования/json. В частности, функциюreflectValueQuoted в кодировке/json/encode.go можно изменить для обработки каналов, таких как массивы. Это позволит осуществлять прямую потоковую передачу данных из каналов в вывод JSON.

Вот предлагаемое изменение в случае Array в ReflectValueQuoted:

case reflect.Array:
    e.WriteByte('[')
    n := v.Len()
    for i := 0; i  0 {
            e.WriteByte(',')
        }
        e.reflectValue(v.Index(i))
    }
    e.WriteByte(']')

// Add the following case for channels:
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(']')

Преимущества патча

Этот патч значительно упростит кодирование больших потоков данных без загрузки всех объектов в память. Это также устранит необходимость в ручной конкатенации строк, снизит риск ошибок и улучшит читаемость кода.

Заключение

Хотя предлагаемый патч не является частью текущего кодирования/json, он демонстрирует потенциальное улучшение, которое может сделать потоковую передачу данных JSON более эффективной и удобной.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3