2016-10-14 6 views

答えて

2

jsonクラスにはgetという機能があります。

は、これらの線に沿って何かを試してみてください:

m = j.get<std::map <std::string, std::vector <int>>(); 

あなたは、それは正確にあなたがそれが望むように動作させるためにそれを少しいじる必要があるかもしれません。

-1

実際、あなたのコードは現在のバージョン(2.0.9)で完全に有効です。

私が試した:

std::map<std::string, std::vector<int>> m = { {"a", {1, 2}}, {"b", {2, 3}} }; 
json j = m; 
std::cout << j << std::endl; 

をし、私が見つけた唯一の解決策は、単に手動でそれを解析することで、出力

{"a":[1,2],"b":[2,3]} 
+1

彼は周りに他の方法についての質問です: 'メートル= J;'申し訳例 – RPGillespie

+0

のために、私はその質問を誤解した。 –

2

を得ました。

std::map<std::string, std::vector<int>> m = { {"a", {1, 2}}, {"b", {2, 3}} }; 
    json j = m; 
    std::cout << j << std::endl; 

    auto v8 = j.get<std::map<std::string, json>>(); 

    std::map<std::string, std::vector<int>> m_new; 
    for (auto &i : v8) 
    { 
     m_new[i.first] = i.second.get<std::vector<int>>(); 
    } 


    for(auto &item : m_new){ 
     std::cout << item.first << ": " ; 
     for(auto & k: item.second){ 
      std::cout << k << ","; 
     } 
     std::cout << std::endl; 
    } 

もし私がヒントをいただければ幸いです。

+0

これは以前の問題でしたが、今修正されました。https://github.com/nlohmann/json/issues/600を参照してください。 –

0

nlomann :: JSON get<typename BasicJsonType>() const

例で、JSONは最も標準的なSTLコンテナへのオブジェクトを変換することができます:

// Raw string to json type 
auto j = R"(
{ 
    "foo" : 
    { 
    "bar" : 1, 
    "baz" : 2 
    } 
} 
)"_json; 

// find object and convert to map 
std::map<std::string, int> m = j.at("foo").get<std::map<std::string, int>>(); 
std::cout << m.at("baz") << "\n"; 
// 2 
関連する問題