Linux 下c++解析json

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

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

2、在你编写的项目例程中添加上头文件,“ #include ”;

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

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

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

     #include
     #include

     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”的文件会生成如下内容:

Linux 下c++解析json_第1张图片

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

#include
#include "jsoncpp/json/json.h"
#include
#include
#include
#include

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;
}

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

Linux 下c++解析json_第2张图片

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

#include    
#include    
#include
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 <     cout <     if(!value["id"].isInt()){
        cout<<"id is not int"<     }else{
        int value_id=value["id"].asInt();
        cout<     }    
    return 0;
}

第一种输出形式结果:

第二种输出形式结果:

Linux 下c++解析json_第3张图片

第三种输出形式结果:

第四种输出形式结果:

<4>读取json文件:

#include
#include
#include
#include
 
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;
}


运行结果如下:

你可能感兴趣的:(嵌入式学习)