cJSON: Формат полей для вложенных структур

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Основной тред
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

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

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Дед Пахом писал(а): 17 Декабрь 2022, 19:18 добавил сводную таблицу правил
Спасибо ! Добрая таблица собралась-то ! :)
Не рассмотрите пополнение коллекции ? ;)

Код: Выделить всё

Для тегов указателей "IsQueue" / "IsStringRef" хочется иметь возможность указывать
дополнение {"IgnoreNull":true} - т.е. просто не выгружать тег если он не инициализирован (его значение &= Null).

Сейчас выгржается указатель как экранированный UTF16 ... хотя какой смысл вообще в выгрузке тега указателя &= Null ? 
Ну или выгружать его хотя бы как "NameRef": null ... если он &= Null ...
:ty:
Последний раз редактировалось Игорь Столяров 17 Декабрь 2022, 20:27, всего редактировалось 1 раз.
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Давайте на каждое предложение прикладывать простейший пример с комментарием "сейчас вот так, а хотелось бы вот так".
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Спасибо - я понял ... Это уже сделано.
Указатель &= 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 ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Из ANY мало что можно вытянуть законными способами, у нас есть только ISSTRING и ISGROUP. Я сделал некие предположения в процессе анализа содержимого ANY, которые вроде бы помогают определить ситуацию "ссылка равна NULL".

Обновил 1.34, но настоятельно прошу протестировать всё (не только этот пример) тщательно.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Спасибо. Я всё проверяю на тестах.
Далее применяю решения в рабочих проектах - это конечно требует времени.
Сейчас отрабатываю выгрузку файлов и SimpleArray ...
Дед Пахом писал(а): 17 Декабрь 2022, 22:29 Из ANY мало что можно вытянуть законными способами,
Даже и не думал, что c проверкой ANY на Null могут возникнуть сложности. :(
Определить тип данных - да, там только строка или группа ...
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Игорь Столяров писал(а): 17 Декабрь 2022, 23:06 Даже и не думал, что c проверкой ANY на Null могут возникнуть сложности.
Дело не в проверки ANY на NULL (она всегда не-NULL), а в проверке того, на что указывает ANY, на NULL, если это вообще тип-"указатель".
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Дед Пахом писал(а): 14 Декабрь 2022, 15:58 Да, эту возможность надо добавить.
Работает просто шикарно ! :ty:
К классу это уже наверно не имеет отношения, но для себя сделал опцию:
если Queue состоит из одного поля - то она всегда выгружается как SimpleArray.
Это просто логическое следствие из функционала класса:
- зачем выгружать наименования тегов, если они потом нигде не используются ? :)
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 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]}
Реальность:
1.jpg
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Это известная проблема, для решения введено правило "ArraySize":

Код: Выделить всё

gPack                         Group
DocTemp                         Long,Dim(2)
                              end
  Root &= json::CreateObject(gPack,, '{{"name":"DocTemp","arraysize":1}')
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Заработало ! Теперь это правило известно и мне. :ty:
Я конечно видел "arraysize" в табличке, но воспринял (почему-то) его как ограничение на обрабатываемую размерность массива.
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Если HOWMANY возвращает 1, то невозможно понять, то ли это просто поле, то ли массив DIM(1). Так что я считаю, что это просто поле без всяких DIM. Поэтому если встречается DIM(1), то всё встаёт колом.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Дед Пахом писал(а): 22 Декабрь 2022, 21:44 Если HOWMANY возвращает 1, то невозможно понять, то ли это просто поле, то ли массив DIM(1)
Неоднозначность. :( А зачем тогда объявление DIM(2), если ArraySize уже явно указывает, что поле - это массив DIM (1) ?
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Потому что проверка "массив/не массив" идёт по HOWMANY.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Понял, нет проблем. Это просто место которое нужно знать. :ty: Особенность.
Сразу столкнулся, как начал делать обработку записей в BROWSE (либо список выбранных, либо текущая запись).
Make Clarion Great Again ! 😎
Закрыто