2017-04-10 60 views
3

我在使用boost庫,C++中的屬性樹創建json數組時遇到了麻煩。使用boost創建json數組property_tree

我把作爲參考this線程,尤其是這部分

ptree pt; 
ptree children; 
ptree child1, child2, child3; 


child1.put("childkeyA", 1); 
child1.put("childkeyB", 2); 

child2.put("childkeyA", 3); 
child2.put("childkeyB", 4); 

child3.put("childkeyA", 5); 
child3.put("childkeyB", 6); 

children.push_back(std::make_pair("", child1)); 
children.push_back(std::make_pair("", child2)); 
children.push_back(std::make_pair("", child3)); 

pt.put("testkey", "testvalue"); 
pt.add_child("MyArray", children); 

write_json("test2.json", pt); 

結果:

{ 
    "testkey": "testvalue", 
    "MyArray": 
    [ 
     { 
      "childkeyA": "1", 
      "childkeyB": "2" 
     }, 
     { 
      "childkeyA": "3", 
      "childkeyB": "4" 
     }, 
     { 
      "childkeyA": "5", 
      "childkeyB": "6" 
     } 
    ] 
} 

但我能做些什麼,如果我想實現只是簡單的陣列不含任何對象?像這樣:

[ 
    { 
     "childkeyA": "1", 
     "childkeyB": "2" 
    }, 
    { 
     "childkeyA": "3", 
     "childkeyB": "4" 
    }, 
    { 
     "childkeyA": "5", 
     "childkeyB": "6" 
    } 
] 

非常感謝。支持JSON

+0

如果你使用'pt.add_child( 「」,孩子們)會發生什麼;'? – NathanOliver

+0

應用程序崩潰,因爲它試圖將孩子添加到空白部分,不幸的是.. 類似'pt.add_child(NULL,children);' –

回答

1

最後,我還沒有找到解決方案使用Boost庫。 但是,這可以通過使用cpprestsdk(「卡薩布蘭卡」)來實現。

例子:

using namespace web; 
using namespace web::http; 
using namespace web::http::client; 
using namespace web::json; 

void testFunction(http_request req) 
{ 

    // only to test the serialization of json arrays 
    json::value elmnt1; 
    elmnt1[L"element"] = json::value::string(U("value1")); 

    json::value elmnt2; 
    elmnt2[L"element"] = json::value::string(U("value2")); 

    json::value response;      // the json array 
    response[0] = elmnt1; 
    response[1] = elmnt2; 

    string outputStr = utility::conversions::to_utf8string(shifts.serialize()); 

    req.reply(200, outputStr, "application/json"); 
}; 

,這導致

[ 
    { 
    "element":"value1" 
    }, 
    { 
    "element":"value2" 
    } 
] 
2

Boost文檔是隻有幾行:

http://www.boost.org/doc/libs/1_63_0/doc/html/property_tree/parsers.html#property_tree.parsers.json_parser

屬性樹集不會打字,和不支持數組作爲 這樣。因此,使用以下JSON /屬性樹映射:

  • JSON對象映射到節點。每個屬性都是一個子節點。
  • JSON數組映射到節點。每個元素是一個 空名稱的子節點。如果一個節點同時具有已命名和未命名的子節點,則不能將其映射到JSON表示。
  • JSON值映射到包含該值的節點。但是,所有類型的 信息都會丟失;數字以及文字「null」,「true」和 「false」都簡單地映射到它們的字符串形式。
  • 包含子節點 和數據的屬性樹節點無法映射。

JSON往返,除了類型信息丟失。

突出礦井