Мне нужно проанализировать вручную, без внешних библиотек, сообщение JSON, поступающее с сервера в C language.

Сообщение, поступающее с сервера, будет выглядеть так:

{[CR+LF]
"Tmg": "R",[CR+LF]
"STP": 72[CR+LF]
}[CR+LF]

Или

{[CR+LF]
"Tmg": "R",[CR+LF]
"STP": 150[CR+LF]
}[CR+LF]

Мне нужен номер после STP:. Номер отличается в каждой структуре сообщения, поэтому мне нужно получить это число из структуры JSON. Я не могу использовать внешние библиотеки, потому что этот код находится во встроенной системе, а внешний код не разрешен.

Я пробовал следующее:

int main (){
    const char response_message[35] = "{\r\n\"Tmg\":\"R\",\r\n\"STP\":72,\r\n}";
    const char needle[8] = "P\":";
    char *ret;

    ret = strstr(response_message, needle);

    printf("The number is: %s\n", ret);

return 0;
}

Но, очевидно, я получаю такой результат:

The number is: P":72,
}

Итак, мне нужно получить только номер, как я могу это получить?

Благодарность

-3
Sergi 10 Янв 2017 в 16:47
3
Слишком широкий! И переполнение стека - это не моя работа! Вы можете использовать strtok()
 – 
Stargateur
10 Янв 2017 в 16:50
Вы можете использовать регулярное выражение для определения некоторых строковых шаблонов и получения конкретной информации из этого шаблона. пожалуйста, изучите библиотеки регулярных выражений для языка C.
 – 
ffguven
10 Янв 2017 в 17:05

1 ответ

Лучший ответ

Можно использовать взломанное решение. Используйте strstr (), чтобы найти "STP": затем найдите следующее, или} и извлеките цифры между ними.

И это взлом. Не гарантируется работа. Для чего-то, что гарантированно работает, вы используете парсер JSON.

3
gnasher729 10 Янв 2017 в 16:52
1
Настоящий вопрос заключается в том, как создается сообщение и какие части его структуры гарантируются. Если он генерируется явно таким образом, а не с использованием высокоуровневых структур и библиотеки JSON (иначе говоря, если это только случается , чтобы выглядеть как сообщение JSON), это не взлом, а специальный синтаксический анализатор.
 – 
Serge Ballesta
10 Янв 2017 в 17:10