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

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

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

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

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

finsoftrz писал(а): 09 Декабрь 2022, 16:40 всегда можно найти работающий код. А в библиотеках на кларионе
Я Вам больше скажу, и на самом Clarion-е фиг что найдёшь ... :D
Вся жись - это бесконечный транслейт с каких-нибудь сей, скриптов, бейсиков, запросов и т.д.
Ловите момент и повышайте компетенции, пока автору не надоело отвечать на наши вопросы. ;)
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5229
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 63 раза

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

Сообщение finsoftrz »

Обобщаете.
У меня пока потребности в json не возникло. Возникнет, буду чесать репу. Сорри, без задних мыслей, я вот подумал, а не получится, как с iqxml? Мож проще для таких дел какой-нибудь pyton вместе со своим софтом подкладывать, где есть все модное и тьма народу работает. Как там бритая девочка в "Миллиарды" говорила, залог успеха в связке pyton и c++.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

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

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

finsoftrz писал(а): 09 Декабрь 2022, 18:23 У меня пока потребности в json не возникло
Ну, например, Вы уверенно работает с кассовым оборудованием, в т.ч. АТОЛ10.
А без JSON там все запросы к ФН выполнить нельзя, и весь новый функционал только на JSON ...
finsoftrz писал(а): 09 Декабрь 2022, 18:23 я вот подумал, а не получится, как с iqxml
Ничто не вечно. Технологии постоянно на ротации ...
Знаете сколько я потратил времени и сделал тестов, что бы объяснить Роберту Пареси,
что нельзя использовать в качестве служебного код русского символа "р" ? Ого-го ! ;)
А сейчас уже даже в совсем старых программах мы давно отказались от iQXml ... Эх ! :(
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5229
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 63 раза

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

Сообщение finsoftrz »

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

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

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

finsoftrz писал(а): 09 Декабрь 2022, 19:22 Перешли на штатный xml?
Да, все задачи с помощью Юрия (всегда помним !) переписали на штатный XML.
И пардон, но весь Меркурий сделан на пространствах имён и прекрасно работает ... :)
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5229
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 63 раза

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

Сообщение finsoftrz »

Ммм... Мы, конечно, отвлекаемся от темы, но в Меркурии никогда не требовалось использование пространства имен. Это в егаис есть, где наименование тегов не фиксированное. Наверно, Вы не поняли, речь про xpath.

Насчет pyton, оно не поддерживает обратную совместимость, актуальные версии не работают на вин7. По json такое впечатление, что пишут кто на что горазд, такой завершенной концепции, как в xml, нет. Мож тоже этот класс погонять...
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

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

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

finsoftrz писал(а): 09 Декабрь 2022, 20:16 Наверно, Вы не поняли
Наверно. Я считал, что это префиксы перед именами тегов.
Всё. Завязали замыливать тему - здесь ещё много интересных дел намечатется ... ;)
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

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

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

Добрый день !

Я обещал пока не плодить пожелания, но проблемные места ведь можно обсудить ? ;)
Мне вообще непонятен смысл экспорта в JSON указателей &= Null ... Простой пример.

Выгрузка списка сотрудников с фотографией и списком средств связи для каждого сотрудника.
Из 500 сотрудников фотки есть пока для 3-х, а контакты для 7-ми.

Но для каждой записи нужно выделять память под строку с фоткой и список, что бы потом это всё подтирать. :(
И если пустые строки можно убрать из строки выгрузки, то пустые массивы '"NameQueue": []' - нет.
А ведь можно просто не выделять память (не инициализировать указатель) на заведомо отсутствующие
реквизиты и просто не выводить в JSON указатели &= Null ... как-то всё очевидно тогда получается.

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

Для тегов с опцией "IsQueue" / "Instance" опция {"IgnoreEmpty":true} - не выгружать тег с пустым массивом
если Records(Queue) = 0. Запрещает формирования строки в JSON с пустым массивом: '"NameQueue": []'

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

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

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

То есть Вы предлагаете добавить возможность не выгружать пустые массивы и объекты:
"array": []
"object": {}

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

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

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

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

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

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

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

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

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

Я думал о таком сценарии: {name:*, IgnoreEmptyObject: true} (все [] и {}). А я, допустим, хочу оставить в json пустые объекты {}. Тогда для них надо явно прописывать правило {name:<object>, IgnoreEmptyObject: false}, а их может быть много.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

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

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

Дед Пахом писал(а): 10 Декабрь 2022, 19:11 А я, допустим, хочу оставить в json пустые объекты {}
Гипотетически, наверно, да. Но, в практическом применении:
- либо не нужны любые пустые объекты (и мы одной командой их убираем),
- либо вручную задаём для каждого объекта стратегию его экспорта.
Т.е. любая задача решается ... :)
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8020
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

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

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

В текущем релизе "IgnoreEmptyArray" не работает для "name":"*" :(
Пример:

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

Root   &cJson
gPack  Group
GrField  Group
FieldS     Long(0)
FieldL     CString(21)
         end
GrList   Group
Doc1       &Queue
Doc2       &Queue
          end
       end
qDoc1  Queue.
qDoc2  Queue.
  Code
  Root &= json::CreateObject(gPack,,|
           '[{{"name":"*","EmptyString":"ignore","IgnoreZero":true,"IgnoreEmptyObject":true,"IgnoreEmptyArray":true},' & |
            '{{"name":"Doc1","instance":' & Instance(qDoc1,Thread()) & '},' & |
            '{{"name":"Doc2","instance":' & Instance(qDoc2,Thread()) & ',"IgnoreEmptyArray":true}]')
  If Not (Root &= Null)
     json::SaveFile('R:\Test.json',Root.ToUtf8())
     Root.Delete()
  end
Результат:

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

{
  "grlist": {
    "doc1": []
  }
}
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

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

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

Так правила для Doc1 главнее общих правил. Мы это обсуждали.
С уважением, ДП
Закрыто