2014-01-25 80 views
2

我試圖使用升壓JSON財產樹來解碼JSON消息。我只關心檢查消息中是否有「mykey」,如果是這樣,請獲取相應的值。
我有點失去了提升的文檔中,我是想看看實際的代碼將解析的消息,如下面的一個。閱讀JSON消息提振JSON

{ 
    // some values 
    "mykey": [ 
     { 
      "var1": "value1_str", 
      "var2" : "value2" 
     } 
    ] 
    // some other values 
} 

回答

3

我不知道有關JSON的Boost ptree。我已經嘗試過了,但它似乎...非常笨重。

這裏的基礎上,RFC一個簡單的JSON解析器,在精神提出:https://github.com/sehe/spirit-v2-json/tree/q21356666

你可以用它爲您的使用情況一樣test.cpp

#include <vector> 
#include "json.hpp" 

struct X { 
    static X from_json(JSON::Value const& v); 

    std::string var1; 
    double  var2; 
}; 

int main() 
{ 
    auto doc = as_object(JSON::parse(
     "{\n" 
     " // some values\n" 
     " \"mykey\": [\n" 
     "  {\n" 
     "   \"var1\": \"value1_str\",\n" 
     "   \"var2\" : 3.14\n" 
     "  }\n" 
     " ]\n" 
     " // some other values\n" 
     "}\n" 
     )); 

    if (doc.has_key("mykey")) 
    { 
     X data = X::from_json(doc["mykey"]); 
     std::cout << "X.var1: " << data.var1 << "\n"; 
     std::cout << "X.var2: " << data.var2 << "\n"; 
    } 

    std::cout << "doc: " << doc << "\n"; 
    std::cout << "doc[\"mykey\"]: " << doc["mykey"] << "\n"; 
} 

X X::from_json(JSON::Value const& v) 
{ 
    X result; 
    auto& o = as_object(as_array(v)[0]); 
    result.var1 = as_string(o["var1"]); 
    result.var2 = as_double(o["var2"]); 

    return result; 
} 

輸出:

X.var1: value1_str 
X.var2: 3.14 
doc: {"mykey":[{"var1":"value1_str","var2":3.14}]} 
doc["mykey"]: [{"var1":"value1_str","var2":3.14}] 

有是周圍的其他json庫。我建議你選擇一個以滿足你的需求。

+0

非常感謝您的回答。非常具有啓發性。現在,我寧願等待,看看有人能幫助ptree並提升json。我寧願在代碼中不要更改太多。作爲一個附註, – Bob

+0

是'doc'結尾'\ n'必要的嗎?爲什麼你使用'自動'? – Bob

+0

@Bob這是JSON,當然這不是必需的。而我很懶。隨意鍵入'JSON :: Object' – sehe