采用Json三方库

Json

Json是一种轻量级的数据交换格式(也叫数据序列化方式)。
Json采用完全独立于编程语言的文本格式 来存储和表示数据。
简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。 
易于人阅读和编 写,同时也易于机器解析和生成,并有效地提升网络传输效率。
 

JSON for Modern C++

直观的语法
整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用 起来非常方便
使用 C++ 11 标准编写
使用 json 像使用 STL 容器一样
STL 和 json 容器之间可以相互转换
严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行为。此 外,还检查了 Valgrind 是否有内存泄漏。为了保持高质量,该项目遵循核心基础设施倡议(CII) 的最佳实践
 

json序列化

1.将json.hpp文件加入项目中

#include "json.hpp"
//给后面作用域下的json一个更加简答的名字
using json = nlohmann::json;

#include <iostream>
#include <vector>
#include <map>
#include<string>

using namespace std;

void func1()
{
    json js;
    //我们想组装的字符格式
    js["msg_type"] = 2;
    js["from"] = "hai bao";
    js["to"] = "nan pan";
    js["msg"] = "hello , hwat are you doing now?";
    //序列化以后的json字符串
    //将json字符串 通过网络发送 ,需要将他转化成字符串类型
    string sendBuf = js.dump();
    //网络上传送的是char* 类型
    cout << sendBuf.c_str() << endl;

    cout << js << endl;
}

void func2()
{
json js1, js2;
    //添加数组
    js1["id"] = {1, 2, 3, 4, 5};
    //添加key - value
    js1["name"] = "账单";
    //添加对象
    js1["msg"]["zhang san"] = "hello in zhang san";
    js1["msg"]["li si"] = "hello im li si";
    //上面等同于下面这句一次性添加数组对象
    js2["msg"] = {{"test1", "testwords1"}, {"test2", "testwords2"}};
    cout << js1 << endl;
    cout << js2 << endl;
}

//json 容器序列化
void func3()
{
    json js;
    vector<int> vec;
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(15);
    js["list"] = vec;

    map<int,string> m;
    m.insert({1,"黄山"});
    m.insert({2,"黑山"});
    m.insert({3,"海豹山"});
    js["path"] = m;
    cout << js << endl;

}

int main()
{
    //独立字段序列化成json
    //容器序列化成json
    //链式哈希表 底层是无序的 你写的顺序和最后打印的顺序不一定一致

    func1();
    func2();
    func3();

    return 0;
}

json反序列化

#include "json.hpp"
//给后面作用域下的json一个更加简答的名字
using json = nlohmann::json;

#include <iostream>
#include <vector>
#include <map>
#include<string>

using namespace std;

string func1()
{
    json js;
    //我们想组装的字符格式
    js["msg_type"] = 2;
    js["from"] = "hai bao";
    js["to"] = "nan pan";
    js["msg"] = "hello , hwat are you doing now?";
    //序列化以后的json字符串
    //将json字符串 通过网络发送 ,需要将他转化成字符串类型
    string sendBuf = js.dump();
    //网络上传送的是char* 类型
    cout << sendBuf.c_str() << endl;    
    return sendBuf;

}

string func2()
{
json js1, js2;
    //添加数组
    js1["id"] = {1, 2, 3, 4, 5};
    //添加key - value
    js1["name"] = "账单";
    //添加对象
    js1["msg"]["zhang san"] = "hello in zhang san";
    js1["msg"]["li si"] = "hello im li si";
    //上面等同于下面这句一次性添加数组对象
    js2["msg"] = {{"test1", "testwords1"}, {"test2", "testwords2"}};

    return js1.dump();
}

//json 容器序列化
string func3()
{
    json js;
    vector<int> vec;
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(15);
    js["list"] = vec;

    map<int,string> m;
    m.insert({1,"黄山"});
    m.insert({2,"黑山"});
    m.insert({3,"海豹山"});
    js["path"] = m;

    return js.dump();
}

int main()
{
    //独立字段序列化成json
    //容器序列化成json
    //链式哈希表 底层是无序的 你写的顺序和最后打印的顺序不一定一致


    // 序列化用dump
    // 反序列化用parse
    string recvBuf = func1();
    json jsBuf = json::parse(recvBuf);
    cout <<"msg_type = "<< jsBuf["msg_type"] << endl;

    string str2 = func2();
    json jsbuf2 = json::parse(str2);
    cout << jsbuf2["id"] << endl;

    cout << jsbuf2["msg"] << endl;
    cout << jsbuf2["msg"]["li si"] << endl;
    auto it = jsbuf2["msg"];
    cout << it["li si"] << endl;

    string str3 = func3();
    json jsbuf3 = json::parse(str3);

    vector<int> vec = jsbuf3["list"];
    map<int,string> m = jsbuf3["path"];
    for(auto &a : vec)
    {
        cout << a << endl;
    }
    for(auto &a : m)
    {
        cout << a.second << endl;
    }


    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值