web-dev-qa-db-ja.com

JSON-CPP-文字列から初期化して文字列値を取得する方法は?

以下の私のコードはクラッシュします(デバッグエラー!R6010 abort()が呼び出されました)。手伝って頂けますか?また、文字列値からjsonオブジェクトを初期化する方法を知りたいです。

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

こんにちは、とても簡単です:

1-データを保存するには、CPP JSON値オブジェクト(Json :: Value)が必要です

2-JSONリーダー(Json :: Reader)を使用してJSON文字列を読み取り、JSONオブジェクトに解析する

3-あなたのものをやる:)

これらの手順を実行する簡単なコードを次に示します。

#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;
}

コンパイルするには:g ++ YourMainFile.cpp -o main -l jsoncpp

私はそれが役立つことを願っています;)

28
Irineu Antunes

ドキュメント で述べられているように、Json::Readerは非推奨です。 Json::CharReaderおよびJson::CharReaderBuilderの使用方法は次のとおりです。

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;

ここでp-a-o-l-oの答えに拍手: jsoncppでJSON文字列を解析

9
martias