美文网首页
C++ Json Encode&Decode

C++ Json Encode&Decode

作者: Bill_Wang | 来源:发表于2016-09-18 15:46 被阅读237次

项目需要用到C++对Json进行编码和编译,今天整理了下对应的方法做了测试

我用的jsoncpp代码库。
参考文章:C++处理JSON数据和在face++ 调用中的使用

测试代码

#include <iostream>
#include <fstream>
#include "json/json.h"

using namespace std;

#define IN_FILENAME "data.json"
#define FAST_OUT_FILENAME "fastout.json"
#define STYLE_OUT_FILENAME "styleout.json"

class JsonTest{
public:
    //读取Json文件
    void readJson(){
        ifstream fin(IN_FILENAME);//打开本地文件
        if( !fin )   //错误处理
        {     
            cout << "Error opening " << IN_FILENAME << " for input" << endl;     
            exit(-1);    
        }  
        // const int LINE_LENGTH = 100;
        // char str[LINE_LENGTH];
        // while(fin.getline(str,LINE_LENGTH)){//按行输出
        //  cout<<"Read from file:"<<str<<endl;
        // }

        Json::Reader reader;//解析json用Json::Reader   
        Json::Value root;// Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array  
        if(reader.parse(fin,root,false)){
            string name = root["name"].asString();//读取字符串
            int type = root["type"].asInt();//读取int
            printf("name:%s,type:%d\n",name.c_str(),type);
            string dataname = root["data"]["name"].asString();//读取对象
            cout<<"dataname:"<<dataname<<endl;
            int pay = root["data"]["pay"][1].asInt();//读取数组
            cout<<"pay:"<<pay<<endl;
        }
        fin.close();
    }

    //写入Json文件
    void writeJson(){
        Json::StyledWriter styled_writer;
        Json::FastWriter faset_writer;//快速写入
        Json::Value root;
        root["name"] = Json::Value("bill");//加入字符串
        root["age"] = Json::Value(32);//加入int
        root["score"] = Json::Value(99.99);//加入浮点类
        root["friends"].append("Amy");//加入数组
        root["hope"]["book"] = Json::Value("C++");//加入对象
        ofstream fout(FAST_OUT_FILENAME);
        fout<<faset_writer.write(root);//写入文件
        fout.close();
        fout.open(STYLE_OUT_FILENAME);
        fout<<styled_writer.write(root);
        fout.close();
    }
};

int main(int argc, char **argv)
{
    JsonTest* test = new JsonTest();
    test->readJson();
    test->writeJson();
}

命令行输入

g++ jsoncpp.cpp jsonTest.cpp -o jsonTest
./jsonTest

进行测试

源码下载

相关文章

网友评论

      本文标题:C++ Json Encode&Decode

      本文链接:https://www.haomeiwen.com/subject/doqgettx.html