viperz
@viperz
inspired by Java

Как справиться с разными кодировками в одном JSONe?

Доброго времени суток, коллеги.

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

Суть:
в рамках фреймворка , который мы пишем на проекте (кстати, если кому интересен IOT - то вот чем мы занимаемся www.kaaproject.org/) используется Apache Avro для конвертации , генерации и валидации схем.

У нас есть некие идентификаторы "uuid", которые генерятся и записываются прямо в эти схемы, для однозначной идентификации разных records.

Но вот задачка в том, что эти идентификаторы в рамках либы Apache Avro записываются в виде бинарных данных (byte[]) в кодировке Latin-1. И вот теперь просто представьте себе, на выходе мы имеем все схемы, которые хранятся в виде джейсонов, которые всем прекрасны, кроме того, что все поля "uuid": "...some bin data in latin-1..." . Получается смесь двух кодировок : UTF-8 & Latin-1.

Отсюда растет другая проблема, если мы экспортируем схему, а потом пытаемся её заимпортить назад - нам нужно парсить этот JSON для валидации некоторых моментов. Но мы имеем невалидный JSON , так как спецификация говорит, что JSON должен быть исключительно в UTF кодировке.

Библиотеки, которые умеют парсить JSONы либо валятся с исключениями ,что там не UTF-8 , либо искажают Latin-1 , что превращает этот идентификатор в абсолютно другой. Моя задача такая - взять byte[] , распарсить его как JSON, пробежать по нодам, кой-чего проверить, вставить и удалить и опять вернуться byte[] никак не искажая существующие идентификаторы в Latin-1 .

Я думал пойти по другому пути - написать класс-наследник для Avro JsonDecoder (который и создает проблему этой кодировкой), но оказалось там закрытые конструторы или пакетного уровня. Думал сделать обертку - но опять, этот класс так используется, что мне нужные некоторые его методы, которые я не могу переопределить. А в некоторых местах мне бы понадобилось имплементить некоторые интерфейсы, уверен за этим потянулась бы вереница зависимостей ))

Буду признателен за любые идеи, как решить эту задачу!
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 1
https://github.com/apache/avro
пишите в любом формате

Кто мешает поменять схему после ее создания программно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы