Как иначе, как не Эзон?

aeson, кажется, использует несколько простодушный подход к анализу JSON: он анализирует значение JSON верхнего уровня (объект или массив) в его собственное фиксированное представление, а затем предлагает средства, помогающие пользователям преобразовать это представление в свое собственное. Этот подход работает довольно хорошо, когда объекты и массивы JSON небольшие. Когда они очень большие, все начинает разваливаться, потому что пользовательский код ничего не может сделать, пока значения JSON не будут полностью прочитаны и проанализированы. Это кажется особенно неудачным, поскольку JSON, похоже, разработан для парсеров с рекурсивным спуском, и кажется, что должно быть довольно просто позволить пользовательскому коду вмешаться и сказать, как следует анализировать каждую часть. Есть ли глубокая причина, по которой aeson и более ранняя json работают таким образом, или мне следует попытаться создать новую библиотеку для более гибкого разбора JSON?


person dfeuer    schedule 07.09.2015    source источник
comment
Пробовали ли вы парсеры на основе потоков, такие как hackage.haskell.org/package/json-stream ?   -  person Yuuri    schedule 07.09.2015
comment
@Yuuri, ты не мог бы ответить?   -  person dfeuer    schedule 09.09.2015


Ответы (1)


json-stream — это парсер на основе потока. Это немного устарело (2015 г.), но они взяли тесты из aeson и сравнили две библиотеки: Сравнение производительности aison и json-stream. Есть один случай, когда json-stream значительно хуже, чем aeson.

Если вам просто нужен более быстрый aeson (не потоковый), haskell-sajson выглядит интересно. Он заключает производительную библиотеку C++ в Haskell и возвращает Value из aeson.

person MCH    schedule 19.11.2019