Страница 3 из 3
cJSON
Добавлено: 21 Сентябрь 2018, 20:27
Дед Пахом
Перегнал cJSON (парсер json, написанный на ANSI C) на Clarion.
Есть примеры использования. Предложения и замечания приветствуются.
Доп. инструмент:
Json Mapper
viewtopic.php?p=54008
cJSON
Добавлено: 22 Январь 2023, 13:19
Игорь Столяров
Дед Пахом писал(а): 21 Январь 2023, 17:28
упростить код в некоторых случаях
Интересно, что Вы пошли по пути сабклассинга собственного класса для вырожденных случаев.
Такие задачи даже я уже давно решил.

cJSON
Добавлено: 22 Январь 2023, 18:49
Дед Пахом
Игорь Столяров писал(а): 22 Январь 2023, 13:19
Интересно, что Вы пошли по пути
Просто закрыл дыры в функционале.
cJSON
Добавлено: 22 Июнь 2023, 14:26
gopstop2007
Обновил, при запуске примера QueueTest.clw ошибки
cJSON
Добавлено: 22 Июнь 2023, 14:38
Игорь Столяров
Там в комплекте идёт класс DynStrClass.inc / clw - их также нужно обновить (или установить).
cJSON
Добавлено: 22 Июнь 2023, 14:44
gopstop2007
Игорь Столяров писал(а): 22 Июнь 2023, 14:38
Там в комплекте идёт класс DynStrClass.inc / clw - их также нужно обновить (или установить).
Вся папка libscr с архива копировалась в c:\Clarion10\accessory\libsrc\win\
cJSON
Добавлено: 22 Июнь 2023, 14:53
Игорь Столяров
Возможно откуда-то подтягивается старая версия ...
Проверьте нет ли c:\Clarion10\libsrc\win\ файлов DynStrClass.*
Или (для теста) скопируйте их в папку собираемого проекта.
cJSON
Добавлено: 22 Июнь 2023, 16:34
gopstop2007
Игорь Столяров писал(а): 22 Июнь 2023, 14:53
Возможно откуда-то подтягивается старая версия ...
Проверьте нет ли c:\Clarion10\libsrc\win\ файлов DynStrClass.*
Или (для теста) скопируйте их в папку собираемого проекта.
Спасибо Игорь, так оно и оказалось.

cJSON
Добавлено: 14 Декабрь 2023, 15:10
Дед Пахом
Новая v1.41 расширяет применение GetStringValue() на числовые данные. Костыль для больших целых чисел на самом деле. Пример:"serialNumber": 417610737815768073. В LONG не влезает, в REAL 4.1761073781576802e17, теперь можно получить корректный номер так: sSerialNumber = jItem.GetStringValue().
cJSON
Добавлено: 18 Август 2024, 15:26
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":""}
Помогите понять в чем проблема, спасибо за внимание
cJSON
Добавлено: 18 Август 2024, 15:56
PavelNK
Вначале могут стоять символы, которые не отображаются. Запишите строку в файл и посмотрите в 16-ричном виде. Возможно в этом дело
cJSON
Добавлено: 18 Август 2024, 16:18
Игорь Столяров
gopstop2007 писал(а): 18 Август 2024, 15:26
Строка JSON для парсинга:
Ну если это задана именно JSON как строка, тогда будьте любезны дублировать левые фигурную и угловую скобки:
Код: Выделить всё
'{{"method":"Purchase","step":0,"params":{{"trnStatus":"1","adv":"ТестБанк","adv2p":"Берем и делаем!",' ... и т.д.
cJSON
Добавлено: 18 Август 2024, 21:14
gopstop2007
нашел, буфер был маленький, смутило что обрезало на обратном слеше
спасибо всем
cJSON
Добавлено: 22 Сентябрь 2024, 0:03
Дед Пахом
v1.44 доступна, был неприятный баг с опциями (изначально его не было, относительно недавное творчество). Суть в том, что дефолтной опцией считалась самая первая, а не та, которая "name":"*". То есть:
Код: Выделить всё
'[{{"name":"Password", "ignore":true}, {{"name":"Balance", "format":"@N$9.2"}, {{"name":"LastVisitDate", "format":"@d17"}, {{"name":"LastVisitTime", "format":"@t8"}]'
Здесь первая опция "Password" считалась дефолтной, соответственно все остальные получали "ignore":true в подарок.
cJSON
Добавлено: 04 Октябрь 2024, 18:39
Дед Пахом
v1.46 доступна.
cJSON
Добавлено: 16 Октябрь 2024, 20:06
Дед Пахом
v1.48 доступна.