2016-08-11 41 views

回答

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

首先,我们要建一个空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"}]} 
+1

太笨拙了,因为它太过于迫切。即使是复杂的json对象,也必须有*一行*初始化支持。这在C++ 14中是可能的。 – Nawaz

+0

更糟糕的是,它甚至不对。你在这里创建了一个数组objectOfData(检查方括号)。你应该为它创建一个地图,而不是一个矢量。 –

+0

@KristófSzalay以上代码正在工作。你为什么认为'json11 :: Json :: object'只带图而不是向量? –

相关问题