我在使用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"
}
]
非常感谢你。
答案 0 :(得分:2)
JSON支持的Boost文档只有几行:
未键入属性树数据集,不支持数组 这样即可。因此,使用以下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"
}
]