2015-06-05 65 views
3

我試圖創建一個JSON數組節點,其輸出是這樣的升壓property_tree我創建空數組節點這樣的:如何使用JSON解析器

{ 
    node: "" 
} 

,這不是我想要的,我需要這樣的:

{ 
    node: [] 
} 

我怎麼能這樣做? 而且我不需要雙引號(「」)在數字周圍。 任何人都可以幫忙嗎?

我的代碼是象下面這樣:

boost::property_tree::ptree pt; 
boost::property_tree::ptree array; 
for (vector<int>::const_iterator iter = v.begin(); 
    iter != v.end(); 
    ++iter) 
{ 
    boost::property_tree::ptree node; 
    node.put("code", *iter); 
    array.push_back(std::make_pair("", node)); 
} 
pt.add_child("array", array); 

感謝您的關注。

回答

2

Boost沒有JSON庫。它有一個屬性樹(思考:分層配置格式)庫。

文檔:http://www.boost.org/doc/libs/1_58_0/doc/html/property_tree/parsers.html#property_tree.parsers.json_parser

它特別指出,有些事情是不支持的很好:JSON

  • 陣列是一個黑客(你不能代表空數組)
  • 所有類型信息丟失(所有內容都需要JSON字符串)

這適合Boost PropertyTree的預期應用領域。如果它不適合您的問題,請使用JSON庫。

+0

謝謝,我會找一些其他圖書館 – mkdym

0

這個答案假定在稍後的階段,你要製作一個屬性樹的字符串。我發現這種情況有一些解決方法。 而不是創建

{ 
    "node": "" 
} 

,你可以很容易地通過做

ptree parent_tree, children, child; 

children.push_back(std::make_pair("", child)); 
pt.add_child("node", children); 

後來創建

{ 
    "node": [""] 
} 

,當你有你的JSON字符串表示,可以通過替換字符[""][]。爲此,您只需要做:

#include <boost/algorithm/string.hpp> 

boost::replace_all(json_string, "[\"\"]", "[]"); 

這樣,你將最終獲得含

{ 
    "node": [] 
} 

希望這有助於一個字符串。