Страница 2 из 3

cJSON

Добавлено: 11 Ноябрь 2019, 12:19
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}

cJSON

Добавлено: 11 Ноябрь 2019, 12:30
Дед Пахом
gopstop2007 писал(а): 11 Ноябрь 2019, 12:19обнаружил ограничение в 2048 символов
Давайте код, проверю.

cJSON

Добавлено: 11 Ноябрь 2019, 15:56
gopstop2007
Дед Пахом писал(а): 11 Ноябрь 2019, 12:30
gopstop2007 писал(а): 11 Ноябрь 2019, 12:19обнаружил ограничение в 2048 символов
Давайте код, проверю.
Извиняюсь, ложная тревога, начал собирать пример и выяснил, проблема была в импортируемых данных из sqlite, в dictonary из импортируемой таблицы, поле с данными длина строки было указано 2048.

cJSON

Добавлено: 01 Сентябрь 2020, 8:42
Игорь Столяров
Извиняюсь, но можно спросить для 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
Или скажите пожалуйста в каком файле посмотреть такой пример.
Заранее спасибо. :)

cJSON

Добавлено: 01 Сентябрь 2020, 9:04
Дед Пахом
Оба класса, cJSON и cJSONFactory, имеют метод ToQueue. Пример есть в QueueTest.clw.

cJSON

Добавлено: 31 Январь 2022, 0:56
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'))

cJSON

Добавлено: 31 Январь 2022, 10:05
gopstop2007
Решил. Не знаю правильно ли, в Queue "goods" добавил группу "good".

cJSON

Добавлено: 31 Январь 2022, 10:14
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"?

cJSON

Добавлено: 31 Январь 2022, 11:39
Дед Пахом
gopstop2007 писал(а): 31 Январь 2022, 10:14 Появилась другая проблема
Ну так откройте новую тему, что всё сюда-то валить.

cJSON

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

Так не прокатит? В родном кларионовском классе JSON именно так нужно

cJSON

Добавлено: 31 Январь 2022, 12:08
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:

cJSON

Добавлено: 10 Январь 2023, 5:20
Admin
printf.inc в репозитории отсутствует.

cJSON

Добавлено: 10 Январь 2023, 6:34
Игорь Столяров
Admin писал(а): 10 Январь 2023, 5:20 printf.inc в репозитории отсутствует.
Файл называется 'PrintF.inc'
см. подлинники на: https://github.com/mikeduglas/printf
или

cJSON

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

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

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

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

  jParser.ToQueue(jsonString, 'book', BooksQ)

cJSON

Добавлено: 21 Январь 2023, 18:08
Дед Пахом
Если json достаточно большой и не хочется его парсить каждый раз, то

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

  jRoot &= jParser.Parse(jsonString)
  jRoot.ToQueue('book', BooksQ)
  jRoot.ToGroup('bicycle', BicycleG)