使用boost property_tree创建json数组

时间:2017-04-10 13:22:48

标签: c++ json boost properties tree

我在使用boost库,C ++中的属性树创建json数组时遇到了麻烦。

我作为参考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"
    }
]

非常感谢你。

2 个答案:

答案 0 :(得分:2)

JSON支持的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往返,但类型信息丢失除外。

突出我的

答案 1 :(得分:1)

最后,我还没有找到使用boost库的解决方案。 但这可以通过使用cpprestsdk来实现(" Casablanca")。

示例:

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"
   }
]