-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
В rx 5.9.0 появилась поддержка многомерных массивов в CJSON.
Сейчас коннектор уже умеет паковать вложенные массивы, но только если они завёрнуты в объекты: {"abc": [ {"f": [1,2,3]}, {"f": "str"}, {"f": [2,3]} ]}.
Вот так выглядит упаковка одномерного массива (она в java-коннекторе уже есть):
ctag (array) // Здесь указано, что дальше лежит массив
atag (int, len) // Здесь тип элементов в массиве и их количество
<int>
<int>
Для многомерных массивов логика упаковки аналогичная (это нужно поддержать). Допустим, мы кодируем вот такой массив {"abc":[[1,2,3], "str", [2,3]]}:
ctag (array) // Здесь указано, что дальше лежит массив
atag (object, len) // Здесь object указывает, что массив гетерогенный
ctag (array) // Здесь указано, что первый объект в составе массива это другой массив
atag (int, len) // тип и длина вложенного массива
<int>
<int>
<int>
ctag (string) // Второй элемент основного массива с типом string
<string>
ctag (array)
atag (int, len) // Третий элемент основного массива, тоже вложенный массив
<int>
<int>
Ещё немного примеров кодирования можно посмотреть в доке https://reindexer.io/reindexer-docs/internal_strucrure/cjson/
Реализация на Go вот здесь https://github.com/Restream/reindexer/tree/master/cjson
Конвертацию из cjson в java-объекты и обратно нужно поддержать для следующих кейсов:
[[1,2],[3],[4,5]]- обычный n-мерный массив конвертируется в n-мерный ArrayList (например);[[1,2],3,[4,5]]- в таком виде некоторые элементы не являются массивами, но тоже однозначно отображаются в n-мерный ArrayList (3станет массивом из 1 элемента);[[1,[2,3]],3,[4,5]]/[[1,2], "string", 4] - различные гетерогенные варианты. В Go такое отображается в массив interface{}. В Java, вероятно, нам и вовся такие штуки поддерживать не стоит (на усмотрение разработчика).
Metadata
Metadata
Assignees
Labels
No labels