#include <iostream>
#include <string>
#include <json/json.h>
#include <fstream>
using namespace std;
typedef struct _PARTNER {
string partner_name;
int partner_age;
bool partner_giao;
}PARTNER;
typedef struct _READ_FILE {
string name;
int age;
bool giao;
PARTNER partner;
string arr[3];
}READ_FILE;
void writeFileJson(string filename, READ_FILE *jsonIn);
void readFileJson(string filename, READ_FILE *jsonOut);
int main(int argc, char *argv[])
{
if(argc != 3)
{
cout << "input err,example: ./jsontest readFile.json writeFile.json" << endl;
return -1;
}
READ_FILE jsonOut = {};
cout << "read" << endl;
readFileJson(string(argv[1]),&jsonOut);
cout << "write" << endl;
writeFileJson(string(argv[2]),&jsonOut);
return 0;
}
void readFileJson(string filename, READ_FILE *jsonOut)
{
Json::Value root;
Json::Reader reader;
ifstream in(filename,ios::binary);
if( !in.is_open() )
{
cout << "Error open file:"<< filename << endl;
return;
}
if(reader.parse(in,root))
{
if(root["name"].isString())
{
jsonOut->name = root["name"].asString();
}
if(root["age"].isInt())
{
jsonOut->age = root["age"].asInt();
cout << "age:" << jsonOut->age << endl;
}
if(root["giao"].isBool())
{
jsonOut->giao = root["giao"].asBool();
}
if(root["partner"]["partner_name"].isString())
{
jsonOut->partner.partner_name = root["partner"]["partner_name"].asString();
}
if(root["partner"]["partner_age"].isInt())
{
jsonOut->partner.partner_age = root["partner"]["partner_age"].asInt();
}
if(root["partner"]["partner_giao"].isBool())
{
jsonOut->partner.partner_giao = root["partner"]["partner_giao"].asBool();
}
for(unsigned int i = 0; i<root["arr"].size(); i++)
{
jsonOut->arr[i] = root["arr"][i].asString();
}
}else
{
cout << "parse error" << endl;
}
in.close();
}
void writeFileJson(string filename, READ_FILE *jsonIn)
{
Json::Value root;
root["name"] = Json::Value(jsonIn->name);
root["age"] = Json::Value(jsonIn->age);
root["giao"] = Json::Value(jsonIn->giao);
Json::Value partner;
partner["partner_name"] = Json::Value(jsonIn->partner.partner_name);
partner["partner_age"] = Json::Value(jsonIn->partner.partner_age);
partner["partner_giao"] = Json::Value(jsonIn->partner.partner_giao);
root["partner"] = Json::Value(partner);
root["arr"].append(jsonIn->arr[2]);
root["arr"].append(jsonIn->arr[1]);
root["arr"].append(jsonIn->arr[0]);
Json::FastWriter fw;
cout << fw.write(root) << endl;
Json::StyledWriter sw;
cout << sw.write(root) << endl;
ofstream os(filename);
os << sw.write(root);
os.close();
}
输出
read
age:23
write
{"age":23,"arr":["arr3","arr2","arr1"],"giao":true,"name":"lileilei","partner":{"partner_age":21,"partner_giao":false,"partner_name":"hanmeimei"}}
{
"age" : 23,
"arr" : [ "arr3", "arr2", "arr1" ],
"giao" : true,
"name" : "lileilei",
"partner" : {
"partner_age" : 21,
"partner_giao" : false,
"partner_name" : "hanmeimei"
}
}