cJSON

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
gopstop2007
✯ Ветеран ✯
Сообщения: 1655
Зарегистрирован: 25 Март 2009, 21:55

cJSON

Сообщение gopstop2007 »

столкнулся с проблемой, воспользовался cJSON, для парсинга как в примере https://github.com/mikeduglas/cJSON/blo ... upTest.clw
при разборе строки, обнаружил ограничение в 2048 символов, со строками менее 2048 проблем нет
как обойти данное ограничение?

пример строки для разбора

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

{"id":44,"parent":9,"name":"Майский чай","picture":"","price":0,"modifications":[{"name":"Відбірна гранула 90г","id":12035,"delete":0,"barcode":"4820198800154","modificator_product_code":"","price":23.5,"hidden":0},{"name":"Царська корона крупнолистовий 250г","id":12036,"delete":0,"barcode":"4820018735680","modificator_product_code":"","price":82.75,"hidden":0},{"name":"лисма индийский крепкий","id":17157,"delete":0,"barcode":"4823063701655","modificator_product_code":"","price":52.25,"hidden":0},{"name":"Цейлон золотий","id":17927,"delete":0,"barcode":"4823063701532","modificator_product_code":"","price":33.5,"hidden":0},{"name":"Индійский мійцний","id":17928,"delete":0,"barcode":"4823063701747","modificator_product_code":"","price":19.75,"hidden":0},{"name":"Зелена пелюстка великий лист 85г","id":12553,"delete":0,"barcode":"4823063700412","modificator_product_code":"","price":33.5,"hidden":0},{"name":"Лісова ягода 20шт","id":14345,"delete":0,"barcode":"4823063700498","modificator_product_code":"","price":14,"hidden":0},{"name":"корона 100 пакетов","id":17161,"delete":0,"barcode":"4820018731873","modificator_product_code":"","price":77.75,"hidden":0},{"name":"Лісма Китайський зелений 80г","id":12554,"delete":0,"barcode":"4820018736120","modificator_product_code":"","price":17.75,"hidden":0},{"name":"майский голд","id":17162,"delete":0,"barcode":"4823063703178","modificator_product_code":"","price":22,"hidden":0},{"name":"Лісма Особливо міцний 90г","id":12555,"delete":0,"barcode":"4820018739763","modificator_product_code":"","price":17,"hidden":0},{"name":"Лісма Міцний з лимоном 20шт","id":12556,"delete":0,"barcode":"4820018739787","modificator_product_code":"","price":14,"hidden":0},{"name":"Лісма Міцний з бергамотом 20шт","id":12557,"delete":0,"barcode":"4820018736144","modificator_product_code":"","price":14,"hidden":0},{"name":"Лісма Солодка полуниця 20шт","id":12558,"delete":0,"barcode":"4820018736069","modificator_product_code":"","price":15.25,"hidden":0},{"name":"Лісма Садова смородина 20шт","id":12559,"delete":0,"barcode":"4820018736106","modificator_product_code":"","price":14,"hidden":0},{"name":"Лісма Домашня малина 20шт","id":12560,"delete":0,"barcode":"4820018736090","modificator_product_code":"","price":15.25,"hidden":0},{"name":"Малина","id":18192,"delete":0,"barcode":"4823063703093","modificator_product_code":"","price":36.5,"hidden":0},{"name":"Лісма Китайський зелений 25шт","id":12561,"delete":0,"barcode":"4820018733754","modificator_product_code":"","price":16,"hidden":0},{"name":"класичний 25*2г 50г","id":16427,"delete":0,"barcode":"4823063702010","modificator_product_code":"","price":19.25,"hidden":0},{"name":"царська корона 85г","id":16428,"delete":0,"barcode":"4823063702157","modificator_product_code":"","price":33.5,"hidden":0},{"name":"Байховий 28 пакетів","id":13638,"delete":0,"barcode":"4823063700207","modificator_product_code":"","price":16.25,"hidden":0},{"name":"Аромат Бергамоту","id":13639,"delete":0,"barcode":"4823063700467","modificator_product_code":"","price":33.5,"hidden":0},{"name":"Царська корона 28 пакетів","id":13640,"delete":0,"barcode":"4823063700238","modificator_product_code":"","price":17.75,"hidden":0},{"name":"Особливо міцний лісма 25шт","id":13131,"delete":0,"barcode":"4823063700542","modificator_product_code":"","price":13.5,"hidden":0},{"name":"Відбірний високогірний 50 г","id":5714,"delete":0,"barcode":"4820018738360","modificator_product_code":"","price":11.25,"hidden":0},{"name":"Граф Грей 90г","id":5715,"delete":0,"barcode":"4820018731972","modificator_product_code":"","price":23.5,"hidden":0},{"name":"Царська корона 50г","id":5716,"delete":0,"barcode":"4820018730104","modificator_product_code":"","price":21.75,"hidden":0},{"name":"Царська корона 180г","id":5717,"delete":0,"barcode":"4820018732948","modificator_product_code":"","price":63.5,"hidden":0},{"name":"з лимоном 45 г 25*1,8 г","id":15189,"delete":0,"barcode":"4823063701907","modificator_product_code":"","price":15.25,"hidden":0},{"name":"Байховий Чай 25шт пакет","id":5718,"delete":0,"barcode":"4820018732078","modificator_product_code":"","price":20.25,"hidden":0},{"name":"Царська корона 25шт пакет +3","id":5719,"delete":0,"barcode":"4820018732085","modificator_product_code":"","price":21,"hidden":0},{"name":"Байховий Чай 85г","id":5720,"delete":0,"barcode":"4820018730029","modificator_product_code":"","price":26.75,"hidden":0},{"name":"Яскравий Єкзотік","id":89,"delete":0,"barcode":"4820018737325","modificator_product_code":"","price":26.5,"hidden":0},{"name":"Царська корона 85г","id":5721,"delete":0,"barcode":"4820018730111","modificator_product_code":"","price":28.5,"hidden":0},{"name":"клубничний Саусеп","id":90,"delete":0,"barcode":"4820018737318","modificator_product_code":"","price":26.5,"hidden":0},{"name":"Відбірний Високогірний 25шт пакет","id":5722,"delete":0,"barcode":"4820018737592","modificator_product_code":"","price":22.75,"hidden":0},{"name":"Плід Страсті","id":91,"delete":0,"barcode":"4820018737301","modificator_product_code":"","price":26.5,"hidden":0},{"name":"Граф Грей 25 шт","id":5723,"delete":0,"barcode":"4820018732269","modificator_product_code":"","price":23.75,"hidden":0},{"name":"класический высокогорний 85 гр","id":16990,"delete":0,"barcode":"4823063704007","modificator_product_code":"","price":32.5,"hidden":0},{"name":"Чай байховый 25 шт 50 грам","id":16991,"delete":0,"barcode":"4823063702133","modificator_product_code":"","price":22,"hidden":0},{"name":"Ароматный с бергамотом ","id":17770,"delete":0,"barcode":"4823063701617","modificator_product_code":"","price":15.25,"hidden":0},{"name":"Лисма 22шт  Индийский","id":12907,"delete":0,"barcode":"4823063700245","modificator_product_code":"","price":10.5,"hidden":0},{"name":"Чай граф грей 37,5","id":3478,"delete":0,"barcode":"4820018732269","modificator_product_code":"","price":26,"hidden":0},{"name":"Чай зелена пелюстка 50г","id":3479,"delete":0,"barcode":"4820018735253","modificator_product_code":"","price":22,"hidden":0},{"name":"Байховий","id":18336,"delete":0,"barcode":"4823063701921","modificator_product_code":"","price":34.5,"hidden":0},{"name":"чай 180 г","id":18390,"delete":0,"barcode":"4823063702072","modificator_product_code":"","price":62.5,"hidden":0},{"name":"Майский Зеленый ","id":17882,"delete":0,"barcode":"4823063702065","modificator_product_code":"","price":22.75,"hidden":0},{"name":"Царская корона 40шт","id":11229,"delete":0,"barcode":"4820018737233","modificator_product_code":"","price":30.75,"hidden":0},{"name":"Царская корона 100шт","id":11230,"delete":0,"barcode":"4820018731873","modificator_product_code":"","price":77.75,"hidden":0},{"name":"100пакетиков Байховый","id":11231,"delete":0,"barcode":"4820018731200","modificator_product_code":"","price":74.25,"hidden":0},{"name":"Індійський міцний лісма 25г","id":8688,"delete":0,"barcode":"4820018732986","modificator_product_code":"","price":14,"hidden":0},{"name":"індійський 90г","id":8689,"delete":0,"barcode":"4820018731125","modificator_product_code":"","price":19.75,"hidden":0},{"name":"байховий 100лджрн","id":8690,"delete":0,"barcode":"4820018733006","modificator_product_code":"","price":50,"hidden":0},{"name":"лисма индийский","id":17149,"delete":0,"barcode":"4823063701693","modificator_product_code":"","price":15.25,"hidden":0}],"color":"red","delete":0,"hidden":0,"workshop":1,"weight_flag":0,"barcode":"","fiscal_program":0,"tax_id":0,"tax_name":"","sort_order":999,"cooking_time":0,"extras":[],"unit":"p","tax_type":0,"tax_value":0,"fiscal":0,"nodiscount":0,"last_modified_time":1566204844}
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

cJSON

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

gopstop2007 писал(а): 11 Ноябрь 2019, 12:19обнаружил ограничение в 2048 символов
Давайте код, проверю.
С уважением, ДП
gopstop2007
✯ Ветеран ✯
Сообщения: 1655
Зарегистрирован: 25 Март 2009, 21:55

cJSON

Сообщение gopstop2007 »

Дед Пахом писал(а): 11 Ноябрь 2019, 12:30
gopstop2007 писал(а): 11 Ноябрь 2019, 12:19обнаружил ограничение в 2048 символов
Давайте код, проверю.
Извиняюсь, ложная тревога, начал собирать пример и выяснил, проблема была в импортируемых данных из sqlite, в dictonary из импортируемой таблицы, поле с данными длина строки было указано 2048.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

cJSON

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

Извиняюсь, но можно спросить для StartUp ? Как формировать JSON пакет - разобрался по примерам.
Но что-то не пойму как распарсить JSON строку в QUEUE ... :(

Т.е. что-то вроде штатного класса:

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

Loc:MyQUEUE QUEUE
Field1 String(20)
Field2 String(20)
Field3 String(20)
   end
   
   Code
   MyJSon.FromJSON(Loc:JSONString,Loc:MyQUEUE)
   Loop i# = 1 to Records(Loc:MyQUEUE)
     Message(Loc:MyQUEUE.Field1)
   end
Или скажите пожалуйста в каком файле посмотреть такой пример.
Заранее спасибо. :)
Приносим Вам свои неудобства !
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

cJSON

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

Оба класса, cJSON и cJSONFactory, имеют метод ToQueue. Пример есть в QueueTest.clw.
С уважением, ДП
gopstop2007
✯ Ветеран ✯
Сообщения: 1655
Зарегистрирован: 25 Март 2009, 21:55

cJSON

Сообщение gopstop2007 »

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

{
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "cashier_name": "string",
    "departament": "string",
   "goods": [{
            "good": {
                "code": "string",
                "name": "string",
                "barcode": "string",
                "excise_barcode": "string",
                "excise_barcodes": ["string"],
                "header": "string",
                "footer": "string",
                "price": 0,
                "tax": [0],
                "uktzed": "string"
            },
            "good_id": "d02efc8a-7305-44cc-a4d1-d1cdc667a623",
            "quantity": 0,
            "is_return": false,
            "discounts": []
        }
    ],
не получается в "goods" Array вставить "good" Object, делаю так:

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

    !create root object
    root &= json::CreateObject()
    !add a string to root
    root.    
    root.AddItemToObject('id', json::CreateString('497f6eca-6276-4993-bfeb-53cbbbba6f08'))
    root.AddItemToObject('cashier_name', json::CreateString('string'))
    root.AddItemToObject('departament', json::CreateString('string'))
    root.AddItemToObject('goods', json::CreateArray(goods))		! < ----- Queue "goods" Array нужно вставить "good" Object
    root.AddItemToObject('delivery', json::CreateString('string'))
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1655
Зарегистрирован: 25 Март 2009, 21:55

cJSON

Сообщение gopstop2007 »

Решил. Не знаю правильно ли, в Queue "goods" добавил группу "good".
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1655
Зарегистрирован: 25 Март 2009, 21:55

cJSON

Сообщение gopstop2007 »

Появилась другая проблема

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

goods              QUEUE            
good            GROUP               
ucode               STRING(50)      ! < ----------------- нужно выводить code вместо ucode
name                STRING(255)     
barcode             STRING(100)     
excise_barcode      STRING(4096)   
excise_barcodes     STRING(100)            
header              STRING(1000)    
footer              STRING(1000)    
price               LONG            
tax                 STRING(100)
uktzed              STRING(255)
                END
good_id             STRING(50)  
quantity            LONG
is_return           BOOL                   
discounts           STRING(100)
                END
нужно в json ItemName указать "code", но так как в Clarion CODE зарезервировано пришлось указать в Group - ucode
Как изменить имя в ItemName или в группе , чтобы показала в json - ItemName - "code"?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

cJSON

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

gopstop2007 писал(а): 31 Январь 2022, 10:14 Появилась другая проблема
Ну так откройте новую тему, что всё сюда-то валить.
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1307
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 2 раза
Контактная информация:

cJSON

Сообщение RaFaeL »

gopstop2007 писал(а): 31 Январь 2022, 10:14 Как изменить имя в ItemName или в группе , чтобы показала в json - ItemName - "code"?
ucode STRING(50),NAME('code')

Так не прокатит? В родном кларионовском классе JSON именно так нужно
gopstop2007
✯ Ветеран ✯
Сообщения: 1655
Зарегистрирован: 25 Март 2009, 21:55

cJSON

Сообщение gopstop2007 »

Дед Пахом писал(а): 31 Январь 2022, 11:39 Ну так откройте новую тему, что всё сюда-то валить.
Подумал, в одном месте и пост не "раздут".
RaFaeL писал(а): 31 Январь 2022, 11:45
gopstop2007 писал(а): 31 Январь 2022, 10:14 Как изменить имя в ItemName или в группе , чтобы показала в json - ItemName - "code"?
ucode STRING(50),NAME('code')

Так не прокатит? В родном кларионовском классе JSON именно так нужно
Спасибо, помогло. :ty:
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Admin
Администратор
Сообщения: 3874
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 7 раз
Поблагодарили: 11 раз
Контактная информация:

cJSON

Сообщение Admin »

printf.inc в репозитории отсутствует.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

cJSON

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

Admin писал(а): 10 Январь 2023, 5:20 printf.inc в репозитории отсутствует.
Файл называется 'PrintF.inc'
см. подлинники на: https://github.com/mikeduglas/printf
или
Вложения
printf-master.zip
(12.38 КБ) 11 скачиваний
Приносим Вам свои неудобства !
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

cJSON

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

Новая версия 1.39 позволит упростить код в некоторых случаях. Например, чтобы загрузить в очередь массив "book" не-верхнего уровня, раньше надо было сперва его найти:

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

  jRoot &= jParser.Parse(jsonString)
  jBooks &= jRoot.FindObjectItem('book')
  jBooks.ToQueue(BooksQ)
Теперь можно сразу:

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

  jParser.ToQueue(jsonString, 'book', BooksQ)
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

cJSON

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

Если json достаточно большой и не хочется его парсить каждый раз, то

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

  jRoot &= jParser.Parse(jsonString)
  jRoot.ToQueue('book', BooksQ)
  jRoot.ToGroup('bicycle', BicycleG)
  
С уважением, ДП
Ответить