24

My code below crashes(Debug Error! R6010 abort() has been called). Can you help me? I'd also would like to know how to initialize the json object from a string value.

Json::Value obj;
obj["test"] = 5;
obj["testsd"] = 655;
string c = obj.asString();

3 Answers 3

42

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 ;)

Sign up to request clarification or add additional context in comments.

4 Comments

Wow, this has been the best quick primer on C++ and json I have seen. awesome
With raw string (C++11), you may use strJson = R"({"mykey" : "myvalue"})";.
FWIW, you should only need to include the single json.h header.
Json::Reader is deprecated. Use CharReader and CharReaderBuilder instead.
28

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

2 Comments

Thanks for this update. It never ceases to amaze me how simple code gets deprecated and replaced by 3x complexity.. Cheers.
0

You can avoid using Json::CharReader and Json::CharReaderBuilder by using stringstream instead.

#include <string>
#include <sstream>
#include "jsoncpp/json/json.h"
    
int main() {
        std::string strJson = "{\"mykey\" : \"myvalue\"}"; 
        Json::Value obj;
    
        // read a JSON String
        stringstream(strJson) >> obj;
    
        // get string value
        std::string value1 = obj["mykey"].asString();

        // or to get a default value if it isn't set
        std::string value2 = obj.get("mykey", "...").asString();
        return 0;
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.