栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

json用法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

json用法

文章目录
  • Json源码地址
  • 为什么用Json
  • Json介绍
  • Json第三方库
  • Json用法 序列化
    • 用法1
    • 用法2 复杂类型
    • 用法3
  • Json用法 反序列化
    • 用法1
    • 用法2
    • 用法3

Json源码地址

只有一个hpp文件,直接调用即可
#include “json.hpp”
using json = nlohmann::json;
GitHub

为什么用Json

相比于protobuf json更加简单。
相对于xml来说,json格式更加简洁,存储同样的文件,花费的内存更小。

Json介绍

假设客户端是java写的,服务器是c++写的,就相当于一个人讲英语,一个人讲中文,但是大家都认识json,所以发啥消息只需要把消息封装成Json即可。
Json是一种轻量级的数据交换格式(也叫数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

Json第三方库

JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。
具有以下特点

  • 直观的语法
  • 整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便
  • 使用 C++ 11 标准编写
  • 使用 json 像使用 STL 容器一样
  • STL 和 json 容器之间可以相互转换
  • 严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行为。此外,还检查了 Valgrind 是否有内存泄漏。为了保持高质量,该项目遵循核心基础设施倡议(CII)的最佳实践
Json用法 序列化 用法1
string func1()
{
    json js;
    js["msg_type"] = 2;
    js["from"] = "zhang san";
    js["to"] = "li si";
    js["msg"] = "hello, what are you doing now?";

    string sendBuf = js.dump();
    //cout< 

用法2 复杂类型
string func2()
{
    json js;
    // 添加数组
    js["id"] = {1, 2, 3, 4, 5};
    // 添加key-value
    js["name"] = "zhang san";
    // 添加对象
    js["msg"]["zhang san"] = "hello world";
    js["msg"]["liu shuo"] = "hello china";
    // 上面等同于下面这句一次性添加数组对象
    js["msg"] = {{"zhang san", "hello world"}, {"liu shuo", "hello china"}};
    //cout << js << endl;
    return js.dump();
}

用法3
string func3()
{
    json js;

    // 直接序列化一个vector容器
    vector vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(5);

    js["list"] = vec;

    // 直接序列化一个map容器
    map m;
    m.insert({1, "挺好的?"});
    m.insert({2, "华山"});
    m.insert({3, "泰山"});

    js["path"] = m;

    string sendBuf = js.dump(); // json数据对象 =》序列化 json字符串
    //cout< 

{“list”:[1,2,5],“path”:[[1,“黄山”],[2,“华山”],[3,“泰山”]]}

Json用法 反序列化 用法1
// 数据的反序列化   json字符串 =》反序列化 数据对象(看作容器,方便访问)
    json jsbuf = json::parse(recvBuf);
    cout< 

用法2
 cout< 

用法3
auto msgjs = jsbuf["msg"];
cout< v = js2["list"];
for(int val : v)
{
cout << val << " ";
}
cout << endl;

// 直接反序列化map容器
map m2 = js2["path"];
for(auto p : m2)
{
	cout << p.first << " " << p.second << endl;
}
cout << endl;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号