cJSON
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
cJSON
Перегнал cJSON (парсер json, написанный на ANSI C) на Clarion. Скачать можно здесь, есть примеры использования. Предложения и замечания приветствуются.
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
cJSON
Обновил до v1.02, теперь можно управлять отдельными полями при чтении/записи групп/очередей/файлов:
- '{{"name":"LastVisitDate", "format":"@d10-"}' - поле даты LastVisitDate будет записано в json в формате @d10-
- '{{"name":"Password", "ignore":true}' - поле Password в json записано не будет.
- '{{"name":"LastVisitDate", "format":"@d10-"}' - поле даты LastVisitDate будет записано в json в формате @d10-
- '{{"name":"Password", "ignore":true}' - поле Password в json записано не будет.
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
cJSON
v1.03:
- добавил опцию "jsonname" (замена имени поля группы на другое имя в json)
- исправил ошибку в функции parse_number
- тест на скорость разборки большого json файла
С уважением, ДП
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
cJSON
продолжая тему viewtopic.php?p=35332#p35332
получилось перекодировать результат с сервера в два шага из json строки:
1. jsonFactory.Parseс unicode в utf-8 (cJSON)
2. из utf8 в ascii с помощью Cstr
не нашел, как сделать за один шаг?
есть ли возможность перекодировать из ascii -> unicode для JSON строки?
получилось перекодировать результат с сервера в два шага из json строки:
1. jsonFactory.Parseс unicode в utf-8 (cJSON)
2. из utf8 в ascii с помощью Cstr
не нашел, как сделать за один шаг?
есть ли возможность перекодировать из ascii -> unicode для JSON строки?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
cJSON
v1.09 на GitHub, новый пример novapochta для демонстрации смены кодировки.
Вкратце:
- если json содержит символы в utf-8 или последовательности вида \uXXXX, то:
- если, наоборот, надо сохранить в json строки в utf-8, то:
Вкратце:
- если json содержит символы в utf-8 или последовательности вида \uXXXX, то:
Код: Выделить всё
parser cJSONFactory
parser.codePage = CP_ACP !- convert utf8 to ascii (active code page)
jRoot &= parser.Parse(jsonString)
Код: Выделить всё
curl.SendRequest(url, jParams.ToUtf8(FALSE, CP_ACP))
С уважением, ДП
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
cJSON
Если неохота возиться с json-объектами, можно сформировать строку напрямую, а в unicode перекодировать с помощью json::StringToULiterals:
Код: Выделить всё
postparams.Cat('{{"apiKey": "","modelName": "Address","calledMethod": "searchSettlements","methodProperties": {{"CityName": "'& json::StringToULiterals('київ') &'","Limit": 5}}')
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 28 раз
- Поблагодарили: 22 раза
- Контактная информация:
libcurl for Clarion
Код: Выделить всё
Parameters GROUP
companies STRING(20),DIM(50),NAME('companies')
sapCodes STRING(20),DIM(50),NAME('sapCodes')
startDate STRING(20),NAME('startDate')
endDate STRING(20),NAME('endDate')
END
params &= json::CreateObject(Parameters, FALSE)
Код: Выделить всё
{"companies":["1", "2", "3", "39", "40", "", "", "", "", ...],"sapCodes":["100345", "100413", "", "", ...],"startDate":"2019-05-13","endDate":"2019-05-13"}
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
вижу 3 варианта:
1. удалить лишние элементы (DeleteItemFromArray)
2. передать в json::CreateObject третий параметр 'options', в котором указать реальные размеры массивов. Правда, такой опции ещё нет.
3. отказаться от json::CreateObject(group), а формировать json по частям.
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 28 раз
- Поблагодарили: 22 раза
- Контактная информация:
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
CreateJSON.clw например.
А libcurl тут причём, кстати? Может, перенести в ветку cjson?
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 28 раз
- Поблагодарили: 22 раза
- Контактная информация:
cJSON
По итогу сделал себе такую процедуру.
Из первого поля переданной очереди создает массив.
В зависимости от типа поля Numeric или String
Из первого поля переданной очереди создает массив.
В зависимости от типа поля Numeric или String
Код: Выделить всё
json::CreateQueueArray PROCEDURE(*QUEUE Q)!, *cJSON
i LONG, AUTO
n &cJSON
p &cJSON
a &cJSON
CODE
a &= json::CreateArray()
LOOP i = 1 TO RECORDS(Q)
IF NOT a &= NULL
GET(Q, i)
IF NOT ERRORCODE()
IF ISSTRING(WHAT(Q,1))
n &= json::CreateString(WHAT(Q,1))
ELSE
n &= json::CreateNumber(WHAT(Q,1))
END
IF n &= NULL
a.Delete()
RETURN NULL
END
IF i = 1
a.child &= n
ELSE
suffix_object(p, n)
END
p &= n
END
END
END
RETURN a
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса