【开源项目】Jsoncpp的简单使用

Jsoncpp是一个开源项目,它是一个用于处理JSON(JavaScript Object Notation)数据的C++库。它支持将C++结构化的数据转化为JSON字符串,也支持将JSON字符串转化为结构化数据

JSON(JavaScript Object Notation)数据格式是一种轻量级的数据交换格式,它基于ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。简单说,JSON 是一种数据格式,不是一种编程语言,虽然它具有相同的语法形式,但它并不遵循 JavaScript 的语法规则。

下面是在Ubuntu中安装Jsoncpp库的指令:

Ubuntu:
sudo apt install -y libjsoncpp-dev

Centos:
sudo yum install -y jsoncpp-devel

安装完成之后我们就可以在如下的目录中查询到头文件

下面我们就来简单使用一下这个库:下面的就是简单的样例代码,我们只需要照猫画虎的套模板够用即可

#include<iostream>
#include<string>
#include<jsoncpp/json/json.h>

struct stu
{
    std::string name;
    int age;
    double weight;
};
int main()
{
    struct stu xm={"小明",18,75};//结构化数据
    Json::Value root;//定义存放数据对象
    root["name"]=xm.name;//向对象中写入
    root["age"]=xm.name;
    root["weight"]=xm.weight;

    Json::FastWriter writer;//定义输出格式对象
    std::string str=writer.write(root);//write函数输出json格式字符串
    std::cout<<str;
    return 0;
}

上面就是一个最简单的演示,其中编译的时候要链接动态库(即加编译选项-ljsoncpp),最终结果是这样的:

当然除了上面的格式,我们在定义输出格式对象的时候还可以定义下面的类的对象,这样字符串的格式就会发生变化

并且对象中可以放自己

并且我们可以发现,打印格式是按名称首字母排序后打印的(a,n,s,w),而不是我代码中的赋值顺序(n,a,w,s)

下面就是给我们json格式的字符串,我们如何转化为结构化的数据,我们无法得到json格式的字符串可以用上面的代码把生成的字符串写入到文件中

struct stu
{
    void print()
    {
        std::cout << "Debug:\nname: " << name << "age: " << age << "weight: " << weight << std::endl;
    }
    std::string name;
    int age;
    double weight;
};

int main()
{
    std::ifstream in("out.txt");
    if (!in.is_open())
        return 1;
    char buffer[1024];
    in.read(buffer, sizeof(buffer));
    in.close();

    std::string json_str = buffer; // 把文件中的字符串读到json_str中
    Json::Value root;              // 定义存放数据对象
    Json::Reader reader;           // 定义解析对象
    int res=reader.parse(json_str, root);  // 把json_str解析到root对象中
    (void)res;
    struct stu xm;
    xm.name = root["name"].asString(); // 从root对象中提取
    xm.age = root["age"].asInt();
    xm.weight = root["weight"].asDouble();

    xm.print();

    return 0;
}

基本的过程就是像上面这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值