cJSON: Формат полей для вложенных структур
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Основной тред
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Основной тред
- Дед Пахом
- Старичок
- Сообщения: 3284
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
cJSON: Формат полей для вложенных структур
Вышла v1.34.
В примере base64Test.clw последняя процедура "FileFromBase64RuleHelperTest" предлагает способ загрузки динамических данных в поля с правилом "auto".
В качестве документации добавил сводную таблицу правил: имя, тип, описание, где применять.
В примере base64Test.clw последняя процедура "FileFromBase64RuleHelperTest" предлагает способ загрузки динамических данных в поля с правилом "auto".
В качестве документации добавил сводную таблицу правил: имя, тип, описание, где применять.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
cJSON: Формат полей для вложенных структур
Спасибо ! Добрая таблица собралась-то !

Не рассмотрите пополнение коллекции ?

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

Последний раз редактировалось Игорь Столяров 17 Декабрь 2022, 20:27, всего редактировалось 1 раз.
Make Clarion Great Again ! 
- Дед Пахом
- Старичок
- Сообщения: 3284
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
cJSON: Формат полей для вложенных структур
Давайте на каждое предложение прикладывать простейший пример с комментарием "сейчас вот так, а хотелось бы вот так".
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
cJSON: Формат полей для вложенных структур
Спасибо - я понял ... Это уже сделано.
Указатель &= Null для "IsQueue" / "IsStringRef" выгружается теперь как пустой массив / строка ... а далее уже понятно.
Единственно, что:
Сейчас выгружается как
а должно ли быть ?
Указатель &= 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
}
Make Clarion Great Again ! 
- Дед Пахом
- Старичок
- Сообщения: 3284
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
cJSON: Формат полей для вложенных структур
Из ANY мало что можно вытянуть законными способами, у нас есть только ISSTRING и ISGROUP. Я сделал некие предположения в процессе анализа содержимого ANY, которые вроде бы помогают определить ситуацию "ссылка равна NULL".
Обновил 1.34, но настоятельно прошу протестировать всё (не только этот пример) тщательно.
Обновил 1.34, но настоятельно прошу протестировать всё (не только этот пример) тщательно.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
cJSON: Формат полей для вложенных структур
Спасибо. Я всё проверяю на тестах.
Далее применяю решения в рабочих проектах - это конечно требует времени.
Сейчас отрабатываю выгрузку файлов и SimpleArray ...

Определить тип данных - да, там только строка или группа ...
Далее применяю решения в рабочих проектах - это конечно требует времени.
Сейчас отрабатываю выгрузку файлов и SimpleArray ...
Даже и не думал, что c проверкой ANY на Null могут возникнуть сложности.

Определить тип данных - да, там только строка или группа ...
Make Clarion Great Again ! 
- Дед Пахом
- Старичок
- Сообщения: 3284
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
cJSON: Формат полей для вложенных структур
Дело не в проверки ANY на NULL (она всегда не-NULL), а в проверке того, на что указывает ANY, на NULL, если это вообще тип-"указатель".Игорь Столяров писал(а): 17 Декабрь 2022, 23:06 Даже и не думал, что c проверкой ANY на Null могут возникнуть сложности.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
cJSON: Формат полей для вложенных структур
Работает просто шикарно !

К классу это уже наверно не имеет отношения, но для себя сделал опцию:
если Queue состоит из одного поля - то она всегда выгружается как SimpleArray.
Это просто логическое следствие из функционала класса:
- зачем выгружать наименования тегов, если они потом нигде не используются ?

Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
cJSON: Формат полей для вложенных структур
Добрый день !
Есть небольшой проблем ... Тестовый код в студию:
Ожидание:
Реальность:
Есть небольшой проблем ... Тестовый код в студию:
Код: Выделить всё
Root &cJson
gPack Group
DocTemp Long,Dim(1)
end
Code
gPack.DocTemp[1] = 123
Root &= json::CreateObject(gPack)
Message(Root.ToString())
Код: Выделить всё
{"doctemp": [123]}
Make Clarion Great Again ! 
- Дед Пахом
- Старичок
- Сообщения: 3284
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
cJSON: Формат полей для вложенных структур
Это известная проблема, для решения введено правило "ArraySize":
Код: Выделить всё
gPack Group
DocTemp Long,Dim(2)
end
Root &= json::CreateObject(gPack,, '{{"name":"DocTemp","arraysize":1}')
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
cJSON: Формат полей для вложенных структур
Заработало ! Теперь это правило известно и мне.
Я конечно видел "arraysize" в табличке, но воспринял (почему-то) его как ограничение на обрабатываемую размерность массива.

Я конечно видел "arraysize" в табличке, но воспринял (почему-то) его как ограничение на обрабатываемую размерность массива.
Make Clarion Great Again ! 
- Дед Пахом
- Старичок
- Сообщения: 3284
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
cJSON: Формат полей для вложенных структур
Если HOWMANY возвращает 1, то невозможно понять, то ли это просто поле, то ли массив DIM(1). Так что я считаю, что это просто поле без всяких DIM. Поэтому если встречается DIM(1), то всё встаёт колом.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
cJSON: Формат полей для вложенных структур
Неоднозначность.Дед Пахом писал(а): 22 Декабрь 2022, 21:44 Если HOWMANY возвращает 1, то невозможно понять, то ли это просто поле, то ли массив DIM(1)

Make Clarion Great Again ! 
- Дед Пахом
- Старичок
- Сообщения: 3284
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
cJSON: Формат полей для вложенных структур
Потому что проверка "массив/не массив" идёт по HOWMANY.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 8016
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 94 раза
cJSON: Формат полей для вложенных структур
Понял, нет проблем. Это просто место которое нужно знать.
Особенность.
Сразу столкнулся, как начал делать обработку записей в BROWSE (либо список выбранных, либо текущая запись).

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