cJSON: Управление содержимым пакета

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

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

cJSON: Управление содержимым пакета

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

Добрый день !

Я три дня занимаюсь попытками сформровать пакет JSON с нужным содержимым хочу обратить Ваше внимание,
что в классе cJSON есть системная проблема с управлением содержимым, в зависимости от значений тегов.

Исторически - был сделан частный случай: механизм подавления "пустых" тегов. И всё.
Т.е. мы не можем в вот такой структуре убрать теги с определёнными значениеми (в т.ч. и через FindCB):

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

Check Group
Text    CString(41)
Font    Byte(11)
...
Item    Queue ! Через Instance()
Header    Group
Print       Bool(True)
Font        Byte(11)
Text        CString(41)
          end
Footer    Group
Print       Bool(True)
Font        Byte(11)
Text        CString(41)
          end
        end  
     end  
Сейчас нет реализации логической полноты для многочисленных EmptyString, IgnoreFalse, IgnoreZero ...
И если нет механизма реализующего общий случай управление записью полей:

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

  {"Name":"Print","IsBool":true,"IgnoreValue":true}
  {"Name":"Font", "IgnoreValue":11}
  
!  "Name":"*" - здесь в принципе не нужен
то мне нужно, как брату овцы, садиться и формировать содержимое JSON вручную по строкам или в тексте. :(
Если есть другие идеи - буду рад их услышать и благодарен за помощь. :)
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Управление содержимым пакета

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

ApplyCB может возвращать пустую строку/0/false, тогда сработают правила EmptyString, IgnoreFalse, IgnoreZero.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Управление содержимым пакета

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

Дед Пахом писал(а): 16 Сентябрь 2024, 12:38 сработают правила EmptyString, IgnoreFalse, IgnoreZero
Но в классе присутствует явная сегрегация: т.е. можно банить теги с false/0, но нельзя с true/ЧИСЛО
Хотя они тоже имеют право быть забаненными, как и все остальные ... ;)

Авторы сторонних систем и сервисов вообще с этим не заморачиваются. Краткий пример:
Если строка чека содержим маркировку - передаём в теге значение 0, иначе тег не формируется
И всё - у нас сразу тупик. :( Начинаем расписывать под каждый запрос FindCB() ...
В Clarion и так своих ограничений полно (Instance/IsBool/JsonName), так зачем ещё искусственные добавлять ?
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Управление содержимым пакета

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

Да и вы не заморачивайтесь, передавайте явно "flag":true, Или вам доплачивают за сэкономленные байты? :shock:

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

cJSON: Управление содержимым пакета

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

Дед Пахом писал(а): 16 Сентябрь 2024, 16:17 Да и вы не заморачивайтесь, передавайте явно "flag":true
Увы ! Мне нужно обратное. УДАЛИТЬ из выгрузки теги со значением "flag":true или "value":НЕ_НОЛЬ :(
Дед Пахом писал(а): 16 Сентябрь 2024, 16:17 например создать корневой объект, затем добавлять по условиям дочерние
Тогда уже проще тупо записывать всё тексте. Можно сделать вообще всё без колбеков и битья челом о глухую стену.
Кстати, многие так и делают. Мне же хочется сохранить структуру и я пытаюсь объяснить почему это не получается сделать.
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Управление содержимым пакета

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

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

cJSON: Управление содержимым пакета

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

Дед Пахом писал(а): 16 Сентябрь 2024, 16:47 Ну очевидно же, что передача "flag":true ни на что не влияет
К сожалению - нет. Это я для Вас расписываю примеры по 2 тега с "подтверждениями" что бы объяснить проблему.
В реальности и тегов сотни с разбивкой по группам и в доке ясно сказано "Тег включается в пакет при изменении значений".
Если я ставлю "подтверждение" флага о печати данных регистрации (которое и так включено), то должен указать и сами данные.
Иначе пакет не проходит валидацию. И с "подтвержающими" нулями тоже самое. И так везде. :(

Я благоранен Вам за консультацию и прошу считать вопрос закрытым. Ваше мнение я с уважением услышал.
Сейчас мест с конским объёмом работы всего два и я их сделаю через FindCB() - вроде бы теперь должно получиться.

Если объём будет нарастать: добавить в форк опции полностью зеркальные IgnoreFalse / IgnoreZero - настолько тупая работа,
что, извините, даже я с ней справляюсь за пару часов (а их смысл я Вам объяснял 4 дня). С классом я работаю постоянно.
Да, будет не так красиво как я расписал Вам

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

  {"Name":"Print","IsBool":true,"IgnoreValue":true}
  {"Name":"Font", "IgnoreValue":11}
  
!  "Name":"*" - здесь в принципе не нужен
но работать будет железно. Есстественно только для своих внутренних потребностей.
А дальше уже пользователи прикладных решений и моих классов рассудят кто был в этом споре на кайфовой стороне. :idied:
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Управление содержимым пакета

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

Я уже предлагал раньше - вносите изменения, я выложу, в чём проблема?
С уважением, ДП
Ответить