美文网首页
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