cJSON

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

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

cJSON

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

Перегнал cJSON (парсер json, написанный на ANSI C) на Clarion.
Есть примеры использования. Предложения и замечания приветствуются.

Изображение

Изображение Изображение

Доп. инструмент:
Json Mapper viewtopic.php?p=54008
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON

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

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

cJSON

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

Игорь Столяров писал(а): 22 Январь 2023, 13:19 Интересно, что Вы пошли по пути
Просто закрыл дыры в функционале.
С уважением, ДП
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

cJSON

Сообщение gopstop2007 »

Обновил, при запуске примера QueueTest.clw ошибки
Вложения
json1.jpg
json2.jpg
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON

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

Там в комплекте идёт класс DynStrClass.inc / clw - их также нужно обновить (или установить).
Make Clarion Great Again ! 😎
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

cJSON

Сообщение gopstop2007 »

Игорь Столяров писал(а): 22 Июнь 2023, 14:38 Там в комплекте идёт класс DynStrClass.inc / clw - их также нужно обновить (или установить).
Вся папка libscr с архива копировалась в c:\Clarion10\accessory\libsrc\win\
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON

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

Возможно откуда-то подтягивается старая версия ...
Проверьте нет ли c:\Clarion10\libsrc\win\ файлов DynStrClass.*
Или (для теста) скопируйте их в папку собираемого проекта.
Make Clarion Great Again ! 😎
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

cJSON

Сообщение gopstop2007 »

Игорь Столяров писал(а): 22 Июнь 2023, 14:53 Возможно откуда-то подтягивается старая версия ...
Проверьте нет ли c:\Clarion10\libsrc\win\ файлов DynStrClass.*
Или (для теста) скопируйте их в папку собираемого проекта.
Спасибо Игорь, так оно и оказалось. :ty:
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON

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

Новая v1.41 расширяет применение GetStringValue() на числовые данные. Костыль для больших целых чисел на самом деле. Пример:"serialNumber": 417610737815768073. В LONG не влезает, в REAL 4.1761073781576802e17, теперь можно получить корректный номер так: sSerialNumber = jItem.GetStringValue().
С уважением, ДП
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

cJSON

Сообщение gopstop2007 »

Парсю ответ:

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

    jsonFactory.codePage = CP_ACP    !- convert utf8 to ascii
    jroot &= jsonFactory.Parse(BankTerm:TermJson_Response)
    IF jroot &= NULL
        !error
        MESSAGE('Syntax error near: '& jsonFactory.GetError() &'|at position '& jsonFactory.GetErrorPosition())
        RETURN
    END
выдает ошибку - 'Syntax error near: {"method":"Purchase at position 1'
Проверял формат JSON через онлайн проверку, ошибок не нашел
Строка JSON для парсинга:

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

{"method":"Purchase","step":0,"params":{"trnStatus":"1","adv":"ТестБанк","adv2p":"Берем и делаем!",  "bankAcquirer":"ТестБанк","paymentSystem":"TESTVISA","rrnExt":"","subMerchant":"","textMess":"","amount":"0,60",  "approvalCode":"70569","captureReference":"","cardExpiryDate":"2512",  "date":"18.08.2024","discount":"0.00","hstFld63Sf89":"","invoiceNumber":"1000840853","issuerName":"TESTVISA",  "merchant":"S0HS0000","pan":"1111**TEST**9999","posConditionCode":"00","posEntryMode":"071","processingCode":"000000", "receipt":"<div class=\"receipt\"><div class=\"font-xl\">ТЕСТБАНК</div><div class=\"font-xs\" id=\"receipt_header\">     Тест совмещение<br/>        вул.Университетськая,буд.102<br/>    г.Мой<br/>            ФОП TECT<br/>         ЄДРПОУ: 1234567890<br/> </div><div class=\"oper\" id=\"oper\">ОПЛАТА</div><div class=\"block\" id=\"report_info\"><div class=\"block font-xl\" id=\"amount\">Сумма: 0,60 грн.</div></div><div class=\"block5\">П</div><div class=\"block5 align-right\"> </div><div class=\"block\" id=\"masked_pan\"> VISA 1234********5678</div><div class=\"block mt-10\" id=\"aid\"> AID: A0000000011111 </div><div class=\"block mb0 font-s\"><div class=\"block5\"><div class=\"pull-left\" id=\"datetime\"> 18.08.2024 15:14:06</div><div class=\"pull-right\" id=\"receipt_id\"> Чек № 1000840853 (Пакет: 0) </div></div><div class=\"block5\"><div class=\"pull-left\" id=\"merchant\"> Мерчант: S0HS0000 </div><div class=\"pull-right\" id=\"terminal_name\"> Терминал № 00101010 </div></div><div class=\"block5\"><div class=\"pull-left\" id=\"approval_code\"> Код авторизации: 177492 </div><div class=\"pull-right\" id=\"rrn\"> RRN: 29329659724 </div></div></div></div>",  "responseCode":"0000","rrn":"29329659724","terminalId":"S0HS0000","time":"15:14:06","track1":"","signVerif":"0","txnType":"1"},  "error":false,"errorDescription":""}
Помогите понять в чем проблема, спасибо за внимание
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
PavelNK
Старожил
Сообщения: 279
Зарегистрирован: 15 Март 2011, 8:02

cJSON

Сообщение PavelNK »

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

cJSON

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

gopstop2007 писал(а): 18 Август 2024, 15:26 Строка JSON для парсинга:
Ну если это задана именно JSON как строка, тогда будьте любезны дублировать левые фигурную и угловую скобки:

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

'{{"method":"Purchase","step":0,"params":{{"trnStatus":"1","adv":"ТестБанк","adv2p":"Берем и делаем!",'  ... и т.д.
Make Clarion Great Again ! 😎
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

cJSON

Сообщение gopstop2007 »

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

cJSON

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

v1.44 доступна, был неприятный баг с опциями (изначально его не было, относительно недавное творчество). Суть в том, что дефолтной опцией считалась самая первая, а не та, которая "name":"*". То есть:

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

'[{{"name":"Password", "ignore":true}, {{"name":"Balance", "format":"@N$9.2"}, {{"name":"LastVisitDate", "format":"@d17"}, {{"name":"LastVisitTime", "format":"@t8"}]'
Здесь первая опция "Password" считалась дефолтной, соответственно все остальные получали "ignore":true в подарок.
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON

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

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

cJSON

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

v1.48 доступна.
С уважением, ДП
Ответить