天天看點

JsonCpp的簡單使用方法

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;