Json-cpp - how to initialize from string and get string value?
Hello it is pretty simple:
1 - You need a CPP JSON value object (Json::Value) to store your data
2 - Use a Json Reader (Json::Reader) to read a JSON String and parse into a JSON Object
3 - Do your Stuff :)
Here is a simple code to make those steps:
#include <stdio.h>#include <jsoncpp/json/json.h>#include <jsoncpp/json/reader.h>#include <jsoncpp/json/writer.h>#include <jsoncpp/json/value.h>#include <string>int main( int argc, const char* argv[] ){ std::string strJson = "{\"mykey\" : \"myvalue\"}"; // need escape the quotes Json::Value root; Json::Reader reader; bool parsingSuccessful = reader.parse( strJson.c_str(), root ); //parse process if ( !parsingSuccessful ) { std::cout << "Failed to parse" << reader.getFormattedErrorMessages(); return 0; } std::cout << root.get("mykey", "A Default Value if not exists" ).asString() << std::endl; return 0;}
To compile: g++ YourMainFile.cpp -o main -l jsoncpp
I hope it helps ;)
Json::Reader
is deprecated. Use Json::CharReader
and Json::CharReaderBuilder
instead:
std::string strJson = R"({"foo": "bar"})";Json::CharReaderBuilder builder;Json::CharReader* reader = builder.newCharReader();Json::Value json;std::string errors;bool parsingSuccessful = reader->parse( strJson.c_str(), strJson.c_str() + strJson.size(), &json, &errors);delete reader;if (!parsingSuccessful) { std::cout << "Failed to parse the JSON, errors:" << std::endl; std::cout << errors << std::endl; return;}std::cout << json.get("foo", "default value").asString() << std::endl;
Kudos to p-a-o-l-o for their answer here: Parsing JSON string with jsoncpp