Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

C++: Как распарсить json?

#cpp #json


Имеется примерно такая json строка:

{"response":[{"id":210700286,"first_name":"Lindsey","last_name":"Stirling"}]}


Как из неё получить значения firstname и lastname?

string firstname = "Lindsey";
string lastname = "Stirling";

    


Ответы

Ответ 1



Воспользуйтесь какой-нибудь библиотекой, например nlohmann/json. Обратите внимание, что в коде ниже используется удобная запись строковых литералов без экранирования в форме R"(строка, которая может содержать кавычки. круглые скобки являются частью синтаксиса и не относятся к строке)". #include "json.hpp" using json = nlohmann::json; int main() { string responseString = R"({"response":[{"id":210700286,"first_name":"Lindsey","last_name":"Stirling"}]})"; json responseJson = json::parse(responseString); json object = responseJson["response"]; string first_name = object[0]["first_name"]; string last_name = object[0]["last_name"]; cout << first_name << endl; cout << last_name << endl; return 0; } Вот пример работы.

Ответ 2



как разработчик shell утилиты jtc предлагаю очень удобную (конечно это мое мнение) c++14 JSON библиотеку - Json.hpp. Ваш пример с данной библиотекой будет выгдядеть вот так: #include #include #include "lib/Json.hpp" using namespace std; int main() { string jstr = R"({"response":[{"id":210700286,"first_name":"Lindsey","last_name":"Stirling"}]})"; Json j{jstr}; string firstname = *j.walk("l"); string lastname = *j.walk("l"); cout << firstname << endl; cout << lastname << endl; } Output: bash $ c++ -o e -std=c++14 example.cpp bash $ e Lindsey Stirling bash $ Хотя, можно было-бы конечно так же легко получить эти значения через прямую аддресацию: string firstname = j["response"][0]["first_name"]; string lastname = j["response"][0]["last_name"];

Комментариев нет:

Отправить комментарий