Linux 下c++解析json

1、首先要在Linux下面安装jsoncpp库:

           在Ubuntu终端中输入 sudo apt-get install libjsoncpp-dev 命令;

2、在你编写的项目例程中添加上头文件,“ #include <jsoncpp/json/json.h>”;

3、 编译的时候要加上 -ljsoncpp 命令;

4、在Linux下使用c++解析json文件:

<1>向文件中写入json格式内容

     #include <jsoncpp/json/json.h>
     #include <fstream>

     using namespace std;
     int main()
     {   
        Json::Value root;
        // 组装json内容
        root["occupation"]  = "paladin";
        root["camp"]        = "alliance";
        root["role_id"]     = 1;
 
        // 将json内容(缩进格式)输出到文件
        Json::StyledWriter writer;
        ofstream os;
        os.open("test.json");
        os << writer.write(root);
        os.close();
        return 0;
     }

编译完后执行可执行文件,在“test.json”的文件会生成如下内容:

<2> 从文件中读取json格式的内容,并打印出来

#include <iostream>
#include "jsoncpp/json/json.h"
#include <stdio.h>
#include <string>
#include <memory>
#include <fstream>

using namespace std;

int main(int argv, char* argc[])
{
    Json::Value root;
    Json::Value header;
    Json::Value arrayObj;
    Json::Value item;
    
    header["pro"]="17";
    header["service_type"]="GPS11";

    char buffer[1000];
    ifstream in("text.txt");

    int i=0;
    if(!in.is_open()){ //判断文件是否打开,没打开直接退出
        cout<<"Error opening file";
        exit(1);
    }    
    while(!in.eof()){  //判断文件是否读取完成
        in.getline(buffer,100);
        item[buffer]=i;
        i++;
        arrayObj.append(item); 
        item.clear();
    }
    root["HEADER"] =header;
    root["BODYLIST"] =arrayObj;
    std::string out =root.toStyledString();  //将json格式内容转化为字符串
    std::cout << out << std::endl;             
    in.close();
    return 0;
}

编译执行后运行结果如下:

<3>定义json变量,赋值并以字符串的形式在终端输出:

#include <iostream>   
#include <string>   
#include <jsoncpp/json/json.h>
using namespace std;  
int main(){  
    Json::Value json_temp;
    json_temp["name"] = Json::Value("sharexu");
    json_temp["age"] = Json::Value(18);
    Json::Value root;
    root["key_string"] = Json::Value("value_string");
    root["key_number"] = Json::Value(12345);
    root["key_boolean"] = Json::Value(false);
    root["key_double"] = Json::Value(12.345);
    root["key_object"] = json_temp;
    root["key_array"].append("array_string");
    root["key_array"].append(1234);
    
    Json::FastWriter fast_writer;
    std::cout << fast_writer.write(root);        //第一种输出形式
    
    Json::StyledWriter styled_writer;         
    std::cout << styled_writer.write(root);     //第二种输出形式,以json样式输出
    
    string str_test ="{\"id\":1,\"name\":\"pacozhong\"}";
    Json::Reader reader;               //定义读取 json的变量
    Json::Value value;
    if (!reader.parse(str_test, value)) //解析json内容
        return 0;
    string value_name=value["name"].asString();   //将name中的值转化为字符串
    cout <<value_name<<endl;      //第三种输出形式
    cout <<value["name"];              //第四种输出形式
    if(!value["id"].isInt()){
        cout<<"id is not int"<<endl;
    }else{
        int value_id=value["id"].asInt();
        cout<<value_id<<endl;
    }    
    return 0;
}

第一种输出形式结果:

第二种输出形式结果:

第三种输出形式结果:

第四种输出形式结果:

<4>读取json文件:

#include <jsoncpp/json/json.h>
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    // 以二进制形式读取json文件内容
    ifstream is("test.json", ios::binary);
 
    if (!is.is_open())
    {
        cout << "open json file failed." << endl;
        return -1;
    }
    
    Json::Reader reader;
    Json::Value root;
 
    int nRole = 0;
    string strOccupation;
    string strCamp;
 
    // 解析json内容
    if (reader.parse(is, root))
    {
        nRole = root["role_id"].asInt();
        strOccupation = root["occupation"].asString();
        strCamp = root["camp"].asString();
    }
 
    is.close();
 
    cout << "role_id is: " << nRole << endl;
    cout << "occupation is: " << strOccupation << endl;
    cout << "camp is: " << strCamp << endl;
 
    return 0;
}


运行结果如下:

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值