jsoncpp c++使用举例

#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"
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值