JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的資料交換語言。
JsonCpp 是一個C++用來處理JSON 資料的開發包。下面講一下怎麼使用JsonCpp來序列化和反序列化Json對象,以實際代碼為例子。
反序列化Json對象
比如一個Json對象的字元串序列如下,其中”array”:[...]表示Json對象中的數組:
{“key1″:”value1″,”array”:[{"key2":"value2"},{"key2":"value3"},{"key2":"value4"}]},那怎麼分别取到key1和key2的值呢,代碼如下所示:
std::string strValue = “{/”key1/”:/”value1/”,/”array/”:[{/"key2/":/"value2/"},{/"key2/":/"value3/"},{/"key2/":/"value4/"}]}”;
Json::Reader reader;
Json::Value value;
if (reader.parse(strValue, value))
{
std::string out = value["key1"].asString();
std::cout << out << std::endl;
const Json::Value arrayObj = value["array"];
for (int i=0; i<arrayObj.size(); i++)
{
out = arrayObj[i]["key2"].asString();
std::cout << out;
if (i != arrayObj.size() – 1 )
std::cout << std::endl;
}
}
序列化Json對象
先建構一個Json對象,此Json對象中含有數組,然後把Json對象序列化成字元串,代碼如下:
Json::Value root;
Json::Value arrayObj;
Json::Value item;
for (int i=0; i<10; i++)
{
item["key"] = i;
arrayObj.append(item);
}
root["key1"] = “value1″;
root["key2"] = “value2″;
root["array"] = arrayObj;
root.toStyledString();
std::string out = root.toStyledString();
std::cout << out << std::endl;