android json字符串转成json对象_C++ 两行代码实现json与类对象互转
背景与需求
之前写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
外部调用接口
/**
最核心的部分也就上面的几个模块,其他的都是一些琐碎的增加类型支持等操作。
学习与引用
- 腾讯json解析库:Tencent/rapidjson
- 杨昕: C++ 轻量级对象JSON序列化实现
备注
工程已经放在Github,名字为AIGCJson,有什么建议或者想法的,欢迎提出issue或者pull request
android json字符串转成json对象_C++ 两行代码实现json与类对象互转相关推荐
- json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值...
json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 原文:json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 主要内容: 一 ...
- Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象
文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...
- json字符串转换成json对象
Json字符与Json对象的相互转换方式有很多,接下来将为大家一一介绍下,感兴趣的朋友可以参考下哈,希望可以帮助到你 1>jQuery插件支持的转换方式: 代码如下: $.parseJSON( ...
- json字符串转成 json对象 json对象转换成java对象
import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> ...
- JSON字符串转换成List对象集合
前两天被一个很没意思的问题给难住了,看来最近没有复习巩固,有些知识都忘了怎么运用了. 简单说下: 有一个json字符串,我想通过jackson把json字符串转换成list对象集合,网上找了很多,但都 ...
- Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题
Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题 1.将1.3的版本升级成1.7的,转换速度就非常快了 附: json数据大小
- Json字符串转成对象
Json字符串转成对象 Hello吖
- JS将Json字符串转换成对象、数组
例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; J ...
- 将html代码确析成json数据格式,JSON字符串解析成JSON数据格式
在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...
最新文章
- Python中的变量作用域
- java 版本SQLHelper
- Rust 1.27支持SIMD
- C语言 | 关于e格式符的问题(附C例程)
- redhat6.4执行二进制程序报错:/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory...
- iOS Hacker 重签名实现无需越狱注入动态库 dylib
- Docker容器技术
- BW之数据源 增量管理DELTA
- c#中事件注册多个委托并获取委托列表
- Taro+react开发(61) 一条虚线
- scala上界_Scala方差,上界和下界
- oracle sql中查询语句where中字段不为空用if怎么写_MyBatis手把手跟我做系列(三) --- 动态SQL标签...
- 从0到1开发H5游戏
- 支持向量回归(多核函数)
- 教你用GoldWave剪裁音频作短视频BGM
- 边缘计算网关平台发展现状综述
- Jupyter notebook 运行时出现 “服务似乎挂掉了,但是会立刻重启的”
- 前沿 | 社区问答系统及相关技术
- 各种滤镜算法C语言,Photoshop入门学习之PS 滤镜算法原理——染色玻璃
- loraserver 源码解析 (六) lora-app-server
热门文章
- 2022年计算机408统考大纲,相比往年大量改动
- C/C++排序算法(6)堆排序
- php设置文件权限问题,php如何设置文件权限
- hadoop使用mapreduce统计词频_hadoop利用mapreduce运行词频统计(非例程)
- 计算机网络常用五大领域命令,现代信息技术试题精选
- 本周日直播丨Oracle 多租户容器数据库体系结构
- 文档丨Oracle 三种迁移方案
- 外连接有 OR 关联条件只能走 NL优化
- 群英论道聚北京,共话PostgreSQL
- 华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致