36

nlohmann の json ライブラリを使用して、c++ で json オブジェクトを操作しています。最終的に、ファイルから json オブジェクトを読み取りたいと思います。たとえば、このような単純なオブジェクトです。

{
"happy": true,
"pi": 3.141
}

これにアプローチする方法がよくわかりません。https://github.com/nlohmannでは、文字列リテラルから逆シリアル化するいくつかの方法が提供されていますが、これを拡張してファイルを読み取るのは簡単ではないようです。誰もこれを経験していますか?

4

2 に答える 2

60

JSON for Modern C++ バージョン 3 の更新 2017-07-03

バージョン 3.0 以降、はjson::json(std::ifstream&)廃止予定です。json::parse()代わりに次を使用する必要があります。

std::ifstream ifs("test.json");
json jf = json::parse(ifs);

std::string str(R"({"json": "beta"})");
json js = json::parse(str);

nlohmann の json ライブラリの使用方法に関する基本的な情報については、nlohmann FAQを参照してください。


JSON for Modern C++ バージョン 2 の更新

バージョン 2.0以降、json::operator>>() id deprecated. json::json()代わりに次を使用する必要があります。

std::ifstream ifs("{\"json\": true}");
json j(ifs);

JSON for Modern C++ バージョン 1 の元の回答

使用json::operator>>(std::istream&):

json j;
std::stringstream ifs("{\"json\": true}");
ifs >> j;
于 2015-11-10T10:55:08.500 に答える
12

コンストラクターjson j(ifs)は推奨されておらず、バージョン 3.0.0 で削除されます。バージョン 2.0.3 以降では、次のように記述する必要があります。

std::ifstream ifs("test.json");
json j = json::parse(ifs);
于 2016-11-16T09:59:56.257 に答える