Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2015, 10:55   #1
Bayern_M
Форумчанин
 
Регистрация: 18.03.2015
Сообщений: 114
По умолчанию Си. Строка в json строку

Здравствуйте!

Имеется строка
Код:
char 	str[500]="{\"ts\":{\"date\":\"Пн. авг. 11 2014\", \"time\":\"16:08:14\", \"ms\":\"793\" },
  \"fault\":\"2\", \"value\":\"0\", \"type\":\"event\",
 \"db\":{ \"nick\":\"Т ХЛД ГЦТ1\", \"name\":\"Температура холодной нитки в петле (1 канал)\", \"block\":\"ПАЭ-02\"}, 
 \"kks\":\"41YAS11CT027A_XQ01\"}";
Написана с учетом синтаксиса JSON формата + заэкранированы кавычки. Необходимо ее распарсить, использую библиотечные json-функции

Подскажите, пожалуйста, как из char строки мне ее переделать в json строку, для дальнейшей обработки? Будут ли мешать мне в дальнейшем символы \?

Я думаю так, не?

Код:
json_t *root = (json_t *) &str;

Последний раз редактировалось Stilet; 10.07.2015 в 19:34.
Bayern_M вне форума Ответить с цитированием
Старый 10.07.2015, 17:20   #2
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Если не ошибаюсь, то в json строках, если используется не латиница, то строка должна быть в виде:

"\u{тут 4 шестнадцатеричные цифры}\u{тут 4 шестнадцатеричные цифры}..." - без {}

Подробнее тут: http://www.json.org/

Но уверен, что библиотека сама должна преобразовывать строки. Только передавать строку надо в нужной для библиотеки кодировке.

А какую библиотеку используете? Можете дать ссылку?
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 13.07.2015, 13:33   #3
Bayern_M
Форумчанин
 
Регистрация: 18.03.2015
Сообщений: 114
По умолчанию

Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
Если не ошибаюсь, то в json строках, если используется не латиница, то строка должна быть в виде:

"\u{тут 4 шестнадцатеричные цифры}\u{тут 4 шестнадцатеричные цифры}..." - без {}

Подробнее тут: http://www.json.org/

Но уверен, что библиотека сама должна преобразовывать строки. Только передавать строку надо в нужной для библиотеки кодировке.

А какую библиотеку используете? Можете дать ссылку?
Пользуюсь библиотекой jansson
http://jansson.readthedocs.org/

Преобразовал обычную строку в json с помощью простой функции json_string()

А как дальше из этой строки выдернуть нужные мне пары ключ:значение, найти не могу..
Bayern_M вне форума Ответить с цитированием
Старый 13.07.2015, 16:29   #4
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
json_t *json_string(const char *value)

Return value: New reference.

Returns a new JSON string, or NULL on error. value must be a valid null terminated UTF-8 encoded Unicode string.
Это обычное преобразование в строку JSON, а Вам нужно отдать на парсинг строку. Скорее всего, нужно использовать json_loads(), но только не ясно в каком виде должна быть строка const char *input.

Цитата:
json_t *json_loads(const char *input, size_t flags, json_error_t *error)

Return value: New reference.

Decodes the JSON string input and returns the array or object it contains, or NULL on error, in which case error is filled with information about the error. flags is described above.
А брать нужные ключи вроде можно с помощь json_object_get().

Цитата:
json_t *json_object_get(const json_t *object, const char *key)

Return value: Borrowed reference.

Get a value corresponding to key from object. Returns NULL if key is not found and on error.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S. (делфи7) nadyaH Помощь студентам 11 13.11.2013 13:36
Задана строка символов. Преобразовать эту строку Proskurina Паскаль, Turbo Pascal, PascalABC.NET 1 28.05.2012 09:40
Json не хочет выводить строку. Abuhamed PHP 3 16.02.2011 22:05
Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S. MrJohanson Помощь студентам 1 10.03.2010 09:51