我想用json11如何使用json11库在json内添加子/嵌套元素?
{
"arrayOfData": [
8,
11,
2016
],
"objectOfData": [
{"day": "8"},
{"month": "11"},
{"year": "2016"}]
}
我要添加数据时,json11对象内部嵌套/子对象的阵列来构建以下JSON对象。
我想用json11如何使用json11库在json内添加子/嵌套元素?
{
"arrayOfData": [
8,
11,
2016
],
"objectOfData": [
{"day": "8"},
{"month": "11"},
{"year": "2016"}]
}
我要添加数据时,json11对象内部嵌套/子对象的阵列来构建以下JSON对象。
json11支持嵌套对象和数组的语法如下:
{
{ //notice one more { here
"arrayOfData", Json::array { //notice {
8,
11,
2016
}
}, //close
{ //open
"objectOfData", Json::array {
Json::object { {"day", "8"} }, //notice {{ and }}
Json::object { {"month", "11"} },
Json::object { {"year", "2016"} }
}
} //close
}
嗯,看起来笨拙与嵌入的注释和嵌套结构的细节。让我们缩小,并期待在一般语法—大局观—没有嵌套结构的意见和细节:
auto object = Json::object {
{ key1, value1 },
{ key2, value2 },
{ key3, value3 },
{ key4, Json::array { ... } },
{ key5, Json::object { {...}, {...}, ... } },
{ key6, value6}
};
希望有所帮助。
首先,我们要建一个空json11对象:
json11::Json::object parent = json11::Json::object{};
然后,我们将构建我们希望把对父母的JSON子/嵌套数组:
std::vector<int> array;
array.push_back(8);
array.push_back(11);
array.push_back(2016);
现在,我们将上面的数组添加到json11对象中:
parent["arrayOfData"] = array;
现在我们将使用json11对象的向量构建对象:
std::vector<json11::Json::object> object;
object.resize(3);
object[0] = json11::Json::object{};
object[0]["day"] = "8";
object[1] = json11::Json::object{};
object[1]["month"] = "11";
object[2] = json11::Json::object{};
object[2]["year"] = "2016";
添加上述对象json11对象:
parent["objectOfData"] = object;
最后生成JSON格式的字符串:
json11::Json json = json11::Json{ parent };
std::string jsonString = json.dump();
现在jsonString
应该看起来像如下:
{"arrayOfData": [8, 11, 2016], "objectOfData": [{"day": "8"}, {"month":
"11"}, {"year": "2016"}]}
太笨拙了,因为它太过于迫切。即使是复杂的json对象,也必须有*一行*初始化支持。这在C++ 14中是可能的。 – Nawaz
更糟糕的是,它甚至不对。你在这里创建了一个数组objectOfData(检查方括号)。你应该为它创建一个地图,而不是一个矢量。 –
@KristófSzalay以上代码正在工作。你为什么认为'json11 :: Json :: object'只带图而不是向量? –