2014-01-25 3 views
2

json 메시지를 디코딩하기 위해 속성 트리로 부스트 json을 사용하려고합니다. 나는 단지 "mykey"가 메시지에 있는지 확인하는 것에 관심이 있으며, 그렇다면 해당 값을 얻는다.
저는 설명서를 조금 늘려 보지 못했습니다. 실제 코드가 아래와 같은 메시지를 구문 분석하는 것이 무엇인지 알아 내려고했습니다.부스트 json으로 json 메시지 읽기

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

답변

3

JSON 용 부스트 ptree에 대해 모르겠다. 나는 그것을 시도했다. 그러나 그것은 매우 clunky ... 것처럼 보였다. 여기

는 성령으로 만든 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