Страница 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.*
Или (для теста) скопируйте их в папку собираемого проекта.
Спасибо Игорь, так оно и оказалось. :ty:

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 доступна.