Страница 12 из 18
cJSON: Формат полей для вложенных структур
Добавлено: 17 Декабрь 2022, 19:18
Дед Пахом
Вышла v1.34.
В примере base64Test.clw последняя процедура "FileFromBase64RuleHelperTest" предлагает способ загрузки динамических данных в поля с правилом "auto".
В качестве документации добавил сводную таблицу правил: имя, тип, описание, где применять.
cJSON: Формат полей для вложенных структур
Добавлено: 17 Декабрь 2022, 20:02
Игорь Столяров
Дед Пахом писал(а): 17 Декабрь 2022, 19:18
добавил сводную таблицу правил
Спасибо ! Добрая таблица собралась-то !

Не рассмотрите пополнение коллекции ?
Код: Выделить всё
Для тегов указателей "IsQueue" / "IsStringRef" хочется иметь возможность указывать
дополнение {"IgnoreNull":true} - т.е. просто не выгружать тег если он не инициализирован (его значение &= Null).
Сейчас выгржается указатель как экранированный UTF16 ... хотя какой смысл вообще в выгрузке тега указателя &= Null ?
Ну или выгружать его хотя бы как "NameRef": null ... если он &= Null ...

cJSON: Формат полей для вложенных структур
Добавлено: 17 Декабрь 2022, 20:13
Дед Пахом
Давайте на каждое предложение прикладывать простейший пример с комментарием "сейчас вот так, а хотелось бы вот так".
cJSON: Формат полей для вложенных структур
Добавлено: 17 Декабрь 2022, 20:49
Игорь Столяров
Спасибо - я понял ... Это уже сделано.
Указатель &= Null для "IsQueue" / "IsStringRef" выгружается теперь как пустой массив / строка ... а далее уже понятно.
Единственно, что:
Код: Выделить всё
Root &cJson
gPack Group
FB Byte(123)
Doc1 &Queue
Doc1Inst Long
RefValue &String
end
Code
Root &= json::CreateObject(gPack)
Сейчас выгружается как
Код: Выделить всё
{
"fb": 123,
"doc1": "\u0000\u0000\u0000\u0000",
"doc1inst": 0,
"refvalue": "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
}
а должно ли быть ?
Код: Выделить всё
{
"fb": 123,
"doc1": null,
"doc1inst": 0,
"refvalue": null
}
cJSON: Формат полей для вложенных структур
Добавлено: 17 Декабрь 2022, 22:29
Дед Пахом
Из ANY мало что можно вытянуть законными способами, у нас есть только ISSTRING и ISGROUP. Я сделал некие предположения в процессе анализа содержимого ANY, которые вроде бы помогают определить ситуацию "ссылка равна NULL".
Обновил 1.34, но настоятельно прошу протестировать всё (не только этот пример) тщательно.
cJSON: Формат полей для вложенных структур
Добавлено: 17 Декабрь 2022, 23:06
Игорь Столяров
Спасибо. Я всё проверяю на тестах.
Далее применяю решения в рабочих проектах - это конечно требует времени.
Сейчас отрабатываю выгрузку файлов и SimpleArray ...
Дед Пахом писал(а): 17 Декабрь 2022, 22:29
Из ANY мало что можно вытянуть законными способами,
Даже и не думал, что c проверкой ANY на Null могут возникнуть сложности.

Определить тип данных - да, там только строка или группа ...
cJSON: Формат полей для вложенных структур
Добавлено: 17 Декабрь 2022, 23:23
Дед Пахом
Игорь Столяров писал(а): 17 Декабрь 2022, 23:06
Даже и не думал, что c проверкой ANY на Null могут возникнуть сложности.
Дело не в проверки ANY на NULL (она всегда не-NULL), а в проверке того, на что указывает ANY, на NULL, если это вообще тип-"указатель".
cJSON: Формат полей для вложенных структур
Добавлено: 20 Декабрь 2022, 12:03
Игорь Столяров
Дед Пахом писал(а): 14 Декабрь 2022, 15:58
Да, эту возможность надо добавить.
Работает просто шикарно !
К классу это уже наверно не имеет отношения, но для себя сделал опцию:
если Queue состоит из одного поля - то она всегда выгружается как SimpleArray.
Это просто логическое следствие из функционала класса:
- зачем выгружать наименования тегов, если они потом нигде не используются ?

cJSON: Формат полей для вложенных структур
Добавлено: 22 Декабрь 2022, 21:12
Игорь Столяров
Добрый день !
Есть небольшой проблем ... Тестовый код в студию:
Код: Выделить всё
Root &cJson
gPack Group
DocTemp Long,Dim(1)
end
Code
gPack.DocTemp[1] = 123
Root &= json::CreateObject(gPack)
Message(Root.ToString())
Ожидание:
Реальность:
cJSON: Формат полей для вложенных структур
Добавлено: 22 Декабрь 2022, 21:23
Дед Пахом
Это известная проблема, для решения введено правило "ArraySize":
Код: Выделить всё
gPack Group
DocTemp Long,Dim(2)
end
Root &= json::CreateObject(gPack,, '{{"name":"DocTemp","arraysize":1}')
cJSON: Формат полей для вложенных структур
Добавлено: 22 Декабрь 2022, 21:37
Игорь Столяров
Заработало ! Теперь это правило известно и мне.
Я конечно видел "arraysize" в табличке, но воспринял (почему-то) его как ограничение на обрабатываемую размерность массива.
cJSON: Формат полей для вложенных структур
Добавлено: 22 Декабрь 2022, 21:44
Дед Пахом
Если HOWMANY возвращает 1, то невозможно понять, то ли это просто поле, то ли массив DIM(1). Так что я считаю, что это просто поле без всяких DIM. Поэтому если встречается DIM(1), то всё встаёт колом.
cJSON: Формат полей для вложенных структур
Добавлено: 22 Декабрь 2022, 21:50
Игорь Столяров
Дед Пахом писал(а): 22 Декабрь 2022, 21:44
Если HOWMANY возвращает 1, то невозможно понять, то ли это просто поле, то ли массив DIM(1)
Неоднозначность.

А зачем тогда объявление DIM(2), если ArraySize уже явно указывает, что поле - это массив DIM (1) ?
cJSON: Формат полей для вложенных структур
Добавлено: 22 Декабрь 2022, 21:55
Дед Пахом
Потому что проверка "массив/не массив" идёт по HOWMANY.
cJSON: Формат полей для вложенных структур
Добавлено: 22 Декабрь 2022, 22:06
Игорь Столяров
Понял, нет проблем. Это просто место которое нужно знать.

Особенность.
Сразу столкнулся, как начал делать обработку записей в BROWSE (либо список выбранных, либо текущая запись).