【C++】JSON文件的读取和生成

jopen 10年前

一、从字符串中读取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

运行结果

二、从文件中读取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

运行结果

三、将信息保存为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

运行结果

生成的文件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