背景与需求

之前写C#的时候,解析json字符串一般使用的是开源的类库Newtonsoft.Json,方法十分简洁,比如:

class 

一行代码就能将json字符串转为相应的类对象。

最近写C++需要处理一下json数据,于是上github找了很多很强大的开源库,像jsoncpp、rapidjson、json,基本上都满足了开发需求,但想要做成像写C#那样子就要做二次开发。于是有了自己写一个简单的json转类 | 结构体的工具的想法。

需求如下:

  • 只有头文件,方便使用
  • 最多三行代码解决转换
  • 支持类 | 结构体 与 json的相互转换
  • 支持多种基本数据类型,如int、float、string、bool等
  • 支持STL基本类型,如vector、list、map<string,T>等
  • 支持嵌套关系
  • 支持成员重命名,比方说json中的关键字是name,成员命名可写成Name或其他。

最终使用的样例代码

class 

实现方法

因为刚好rapidjson只需要头文件就可以使用,所以选择了rapidjson作为基础库,进行二次开发。

基础类型的转换

作为最底层的接口,只需要进行一个赋值的操作即可,后续如果想要增加一些其他类型支持,添加起来也比较方便。

static 

类成员注册

这里使用宏定义方式 + 可变参数模板的方式来实现,即可依次对注册的成员进行赋值

template 

自定义类的转换

自定义类由于并不清楚外界使用时,是否有按规定添加好成员注册接口,所以这里采用enable_if的方式来尝试调用,编译的时候也就不会报错。

template 

外部调用接口

/**

最核心的部分也就上面的几个模块,其他的都是一些琐碎的增加类型支持等操作。

学习与引用

  1. 腾讯json解析库:Tencent/rapidjson
  2. 杨昕: C++ 轻量级对象JSON序列化实现

备注

工程已经放在Github,名字为AIGCJson,有什么建议或者想法的,欢迎提出issue或者pull request

android json字符串转成json对象_C++ 两行代码实现json与类对象互转相关推荐

  1. json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值...

    json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 原文:json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 主要内容: 一 ...

  2. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象

    文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...

  3. json字符串转换成json对象

    Json字符与Json对象的相互转换方式有很多,接下来将为大家一一介绍下,感兴趣的朋友可以参考下哈,希望可以帮助到你 1>jQuery插件支持的转换方式: 代码如下: $.parseJSON( ...

  4. json字符串转成 json对象 json对象转换成java对象

    import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> ...

  5. JSON字符串转换成List对象集合

    前两天被一个很没意思的问题给难住了,看来最近没有复习巩固,有些知识都忘了怎么运用了. 简单说下: 有一个json字符串,我想通过jackson把json字符串转换成list对象集合,网上找了很多,但都 ...

  6. Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题

    Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题 1.将1.3的版本升级成1.7的,转换速度就非常快了 附: json数据大小

  7. Json字符串转成对象

    Json字符串转成对象 Hello吖

  8. JS将Json字符串转换成对象、数组

    例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; J ...

  9. 将html代码确析成json数据格式,JSON字符串解析成JSON数据格式

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

最新文章

  1. Python中的变量作用域
  2. java 版本SQLHelper
  3. Rust 1.27支持SIMD
  4. C语言 | 关于e格式符的问题(附C例程)
  5. redhat6.4执行二进制程序报错:/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory...
  6. iOS Hacker 重签名实现无需越狱注入动态库 dylib
  7. Docker容器技术
  8. BW之数据源 增量管理DELTA
  9. c#中事件注册多个委托并获取委托列表
  10. Taro+react开发(61) 一条虚线
  11. scala上界_Scala方差,上界和下界
  12. oracle sql中查询语句where中字段不为空用if怎么写_MyBatis手把手跟我做系列(三) --- 动态SQL标签...
  13. 从0到1开发H5游戏
  14. 支持向量回归(多核函数)
  15. 教你用GoldWave剪裁音频作短视频BGM
  16. 边缘计算网关平台发展现状综述
  17. Jupyter notebook 运行时出现 “服务似乎挂掉了,但是会立刻重启的”
  18. 前沿 | 社区问答系统及相关技术
  19. 各种滤镜算法C语言,Photoshop入门学习之PS 滤镜算法原理——染色玻璃
  20. loraserver 源码解析 (六) lora-app-server

热门文章

  1. 2022年计算机408统考大纲,相比往年大量改动
  2. C/C++排序算法(6)堆排序
  3. php设置文件权限问题,php如何设置文件权限
  4. hadoop使用mapreduce统计词频_hadoop利用mapreduce运行词频统计(非例程)
  5. 计算机网络常用五大领域命令,现代信息技术试题精选
  6. 本周日直播丨Oracle 多租户容器数据库体系结构
  7. 文档丨Oracle 三种迁移方案
  8. 外连接有 OR 关联条件只能走 NL优化
  9. 群英论道聚北京,共话PostgreSQL
  10. 华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致