一、从字符串中读取JSON

a.cpp

#include <iostream>        


                  


         #include "json/json.h"        


                  


         using          namespace          std;        


                  


         int          main()        


         {        


                  //字符串        


                  const          char         * str =         


                  "{\"praenomen\":\"Gaius\",\"nomen\":\"Julius\",\"cognomen\":\"Caezar\","        


                  "\"born\":-100,\"died\":-44}"         ;        


                  


                  Json::Reader reader;        


                  Json::Value root;        


                  


                  //从字符串中读取数据        


                  if         (reader.parse(str,root))        


                  {        


                  string praenomen = root[         "praenomen"         ].asString();        


                  string nomen = root[         "nomen"         ].asString();        


                  string cognomen = root[         "cognomen"         ].asString();        


                  int          born = root[         "born"         ].asInt();        


                  int          died = root[         "died"         ].asInt();        


                  


                  cout << praenomen +          " "          + nomen +          " "          + cognomen        


                  <<          " was born in year "          << born         


                  <<          ", died in year "          << died << endl;        


                  }        


                  


                  return          0;        


         }


makefile文件

LIB=-L         /usr/local/lib/libjson/          -ljson_linux-         gcc         -4.4.7_libmt        


                  


         a: a.o        


                  g++ -o a -std=c++0x a.o $(LIB)        


         a.o: a.cpp         


                  g++ -c a.cpp        


         clean:        


                  rm          -rf a.o a


运行结果

C++操作Json字符串_字符串

二、从文件中读取JSON

PersonalInfo.json(一个存储了JSON格式字符串的文件)


{        


                  "name"         :         "Tsybius"         ,        


                  "age"         :23,        


                  "sex_is_male"         :         true         ,        


                  "partner"         :        


                  {        


                  "partner_name"         :         "Galatea"         ,        


                  "partner_age"         :21,        


                  "partner_sex_is_male"         :         false        


                  },        


                  "achievement"         :[         "ach1"         ,         "ach2"         ,         "ach3"         ]        


         }


a.cpp


#include <iostream>        


         #include <fstream>        


                  


         #include "json/json.h"        


                  


         using          namespace          std;        


                  


         int          main()        


         {        


                  Json::Reader reader;        


                  Json::Value root;        


                  


                  //从文件中读取        


                  ifstream is;        


                  is.open(         "PersonalInfo.json"         , ios::binary);        


                  


                  if         (reader.parse(is,root))        


                  {        


                  //读取根节点信息        


                  string name = root[         "name"         ].asString();        


                  int          age = root[         "age"         ].asInt();        


                  bool          sex_is_male = root[         "sex_is_male"         ].asBool();        


                  


                  cout <<          "My name is "          << name << endl;        


                  cout <<          "I'm "          << age <<          " years old"          << endl;        


                  cout <<          "I'm a "          << (sex_is_male ?          "man"          :          "woman"         ) << endl;        


                  


                  //读取子节点信息        


                  string partner_name = root[         "partner"         ][         "partner_name"         ].asString();        


                  int          partner_age = root[         "partner"         ][         "partner_age"         ].asInt();        


                  bool          partner_sex_is_male = root[         "partner"         ][         "partner_sex_is_male"         ].asBool();        


                  


                  cout <<          "My partner's name is "          << partner_name << endl;        


                  cout << (partner_sex_is_male ?          "he"          :          "she"         ) <<          " is "        


                  << partner_age <<          " years old"          << endl;        


                  


                  //读取数组信息        


                  cout <<          "Here's my achievements:"          << endl;        


                  for         (         int          i = 0; i < root[         "achievement"         ].size(); i++)        


                  {        


                  string ach = root[         "achievement"         ][i].asString();        


                  cout << ach <<          '\t'         ;        


                  }        


                  cout << endl;        


                  


                  cout <<          "Reading Complete!"          << endl;        


                  }        


                  


                  is.close();        


                  


                  return          0;        


         }


makefile


LIB=-L         /usr/local/lib/libjson/          -ljson_linux-         gcc         -4.4.7_libmt        


                  


         a: a.o        


                  g++ -o a -std=c++0x a.o $(LIB)        


         a.o: a.cpp         


                  g++ -c a.cpp        


         clean:        


                  rm          -rf a.o a


运行结果

C++操作Json字符串_字符串_02

三、将信息保存为JSON格式

a.cpp


#include <iostream>        


         #include <fstream>        


                  


         #include "json/json.h"        


                  


         using          namespace          std;        


                  


         int          main()        


         {        


                  //根节点        


                  Json::Value root;        


                  


                  //根节点属性        


                  root[         "name"         ] = Json::Value(         "Tsybius"         );        


                  root[         "age"         ] = Json::Value(23);        


                  root[         "sex_is_male"         ] = Json::Value(         true         );        


                  


                  //子节点        


                  Json::Value partner;        


                  


                  //子节点属性        


                  partner[         "partner_name"         ] = Json::Value(         "Galatea"         );        


                  partner[         "partner_age"         ] = Json::Value(21);        


                  partner[         "partner_sex_is_male"         ] = Json::Value(         false         );        


                  


                  //子节点挂到根节点上        


                  root[         "partner"         ] = Json::Value(partner);        


                  


                  //数组形式        


                  root[         "achievement"         ].append(         "ach1"         );        


                  root[         "achievement"         ].append(         "ach2"         );        


                  root[         "achievement"         ].append(         "ach3"         );        


                  


                  //直接输出        


                  cout <<          "FastWriter:"          << endl;        


                  Json::FastWriter fw;        


                  cout << fw.write(root) << endl << endl;        


                  


                  //缩进输出        


                  cout <<          "StyledWriter:"          << endl;        


                  Json::StyledWriter sw;        


                  cout << sw.write(root) << endl << endl;        


                  


                  //输出到文件        


                  ofstream os;        


                  os.open(         "PersonalInfo"         );        


                  os << sw.write(root);        


                  os.close();        


                  


                  return          0;        


         }


makefile


LIB=-L         /usr/local/lib/libjson/          -ljson_linux-         gcc         -4.4.7_libmt        


                  


         a: a.o        


                  g++ -o a -std=c++0x a.o $(LIB)        


         a.o: a.cpp         


                  g++ -c a.cpp        


         clean:        


                  rm          -rf a.o a


运行结果

C++操作Json字符串_c++_03

生成的文件PersonalInfo.json


{        


                  "achievement"          : [          "ach1"         ,          "ach2"         ,          "ach3"          ],        


                  "age"          : 23,        


                  "name"          :          "Tsybius"         ,        


                  "partner"          : {        


                  "partner_age"          : 21,        


                  "partner_name"          :          "Galatea"         ,        


                  "partner_sex_is_male"          :          false        


                  },        


                  "sex_is_male"          :          true        


         }


END