Кодирование больших потоков данных с помощью 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