如何使用json11库在json中添加子/嵌套元素?

时间:2016-08-11 05:21:22

标签: c++ json object nested

我想使用json11

构建以下json对象
{
  "arrayOfData": [
    8,
    11,
    2016
  ],
  "objectOfData": [
    {"day": "8"},
    {"month": "11"},
    {"year": "2016"}]
}

我想在json11对象中添加数据数组,嵌套/子对象。

2 个答案:

答案 0 :(得分:2)

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}
};

希望有所帮助。

答案 1 :(得分:-1)

首先,我们将构建一个空的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"}]}