C++ 11帶來了很多新特性,其中之一是對JSON數(shù)據(jù)的支持。JSON是一種輕量級的數(shù)據(jù)格式,在Web應(yīng)用程序和移動應(yīng)用程序中廣泛使用。在C++中,我們可以使用第三方庫(例如RapidJSON)來解析和創(chuàng)建JSON數(shù)據(jù),但是在C++ 11中,我們可以使用STL來處理JSON數(shù)據(jù)。
首先,我們需要包含<json</
。然后,我們可以使用std::string
來存儲JSON數(shù)據(jù)。例如,我們可以使用以下代碼創(chuàng)建一個JSON字符串:
std::string jsonStr = R"(
{
"name": "John",
"age": 30,
"car": {
"model": "Honda",
"year": 2010
}
}
)";
現(xiàn)在我們已經(jīng)有了JSON字符串,我們可以使用std::stringstream
和std::istream
將其轉(zhuǎn)換為JSON對象。例如,我們可以使用以下代碼創(chuàng)建一個JSON對象:
std::stringstream ss(jsonStr);
std::istream& is = ss;
std::map<std::string, json> jsonObj;
is >> jsonObj;
現(xiàn)在,jsonObj包含我們從JSON字符串中解析出的數(shù)據(jù)。我們可以使用std::map<std::string, json>
來表示JSON對象。在JSON對象中,鍵是字符串,值可以是字符串、數(shù)字、布爾值、數(shù)組或嵌套JSON對象。
例如,我們可以使用jsonObj["name"]
來獲取字符串“John”,使用jsonObj["age"]
來獲取數(shù)字30,使用jsonObj["car"]["model"]
來獲取字符串“Honda”。
我們也可以使用std::vector<json>
來表示JSON數(shù)組。例如,我們可以使用以下代碼將JSON數(shù)組解析為std::vector
:
std::string jsonArrayStr = R"(
[
{
"name": "John",
"age": 30,
"car": {
"model": "Honda",
"year": 2010
}
},
{
"name": "Jane",
"age": 25,
"car": {
"model": "Toyota",
"year": 2015
}
}
]
)";
std::stringstream ss2(jsonArrayStr);
std::istream& is2 = ss2;
std::vector<json> jsonArray;
is2 >> jsonArray;
現(xiàn)在,我們可以使用jsonArray[0]["name"]
來獲取字符串“John”,使用jsonArray[1]["name"]
來獲取字符串“Jane”。
C++ 11的JSON支持為我們提供了更方便、更高效的JSON數(shù)據(jù)處理方式。它使得我們可以輕松地在C++中使用Web應(yīng)用程序和移動應(yīng)用程序中使用的JSON數(shù)據(jù)。如果您想要對JSON數(shù)據(jù)進(jìn)行更高級的處理,那么您可以使用第三方庫來補(bǔ)充C++ 11中的JSON支持。