iguana::json/xml 序列化框架
环境:win10 vs2017 c++17 boost
1、下载源码:https://github.com/qicosmos/iguana
2、创建工程,包含源码目录、boost库目录;boost库;c++17
//json结构模板
struct person
{
std::string name;
int age;
};
REFLECTION(person, name, age) struct one_t
{
int id;
};
REFLECTION(one_t, id); struct two
{
std::string name;
one_t one;
int age;
};
REFLECTION(two, name, one, age); struct composit_t
{
int a;
std::vector<std::string> b;
int c;
std::map<int, int> d;
std::unordered_map<int, int> e;
double f;
std::list<one_t> g;
};
REFLECTION(composit_t, a, b, c, d, e, f, g);
void test_json()
{
person p;
const char * json = "{ \"name\" : \"tom\", \"age\" : 20}";
//string转对象
auto r = iguana::json::from_json0(p, json);
std::cout << p.age << " " << p.name << std::endl; iguana::string_stream ss;
//对象转string
iguana::json::to_json(ss, p);
std::cout << ss.str() << std::endl; //复杂结构转string
one_t one = { };
composit_t composit = { ,{ "tom", "jack" }, ,{ { , } },{ { , } }, 5.3,{ one } };
iguana::string_stream sst;
iguana::json::to_json(sst, composit);
std::cout << sst.str() << std::endl; //string转对象
const char* str_comp = R"({"b":["tom", "jack"], "a":1, "c":3, "e":{"":4}, "d":{"":3,"":6},"f":5.3,"g":[{"id":1},{"id":2}])";
composit_t comp;
iguana::json::from_json0(comp, str_comp);
std::cout << comp.a << " " << comp.f << std::endl;
}
void test_xml()
{
person p = { "admin", };
iguana::string_stream ss;
iguana::xml::to_xml(ss, p);
std::cout << ss.str() << std::endl;
//<?xml version = "1.0" encoding="UTF-8"><name>admin</name><age>20</age> ss.clear();
two t = { "test", {}, };
iguana::xml::to_xml(ss, t);
auto result = ss.str();
std::cout << result << std::endl;
//<?xml version = "1.0" encoding="UTF-8"><name>test</name><one><id>2</id></one><age>4</age> std::string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"> <name>buke</name> <one><id>1</id></one> <age>2</age>";
two t1;
iguana::xml::from_xml(t1, xml.data(), xml.length());
std::cout << t1.name << std::endl;
}
iguana::json/xml 序列化框架的更多相关文章
- Atitit.json xml 序列化循环引用解决方案json
Atitit.json xml 序列化循环引用解决方案json 1. 循环引用1 2. 序列化循环引用解决方法1 2.1. 自定义序列化器1 2.2. 排除策略1 2.3. 设置序列化层次,一般3级别 ...
- JSON/XML序列化与反序列化(非构造自定义类)
隔了很长时间再重看自己的代码,觉得好陌生..以后要养成多注释的好习惯..直接贴代码..对不起( ▼-▼ ) 保存保存:进行序列化后存入应用设置里 ApplicationDataContainer _a ...
- Json/XML序列化和反序列化
1.json序列化和反序列化 序列化是将对象状态转换为可保持或传输的格式的过程; 反序列化,它将流转换为对象; 1)Json.Net 推荐使用Json.Net类库,需要引入的命名空间; 序列化:Jso ...
- 使用高性能xml序列化框架jibx作为spring mvc的xml view
package org.springframework.web.servlet.view.xml; import java.io.ByteArrayOutputStream; import java. ...
- 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化
谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...
- Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...
- ASP.NET Web API中的JSON和XML序列化
ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...
- JSON格式序列化与反序列化(List、XML)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
随机推荐
- 垃圾佬的旅游III(Hash + 暴力)
题目链接:http://120.78.128.11/Problem.jsp?pid=3445 最开始的思路就是直接暴力求解,先把所有的数值两两存入结构体,再从小到大枚举.用二分的思路去判断数值以及出现 ...
- C# 缓存的实现
缓存的实现 我们不是做第三方比如Redis等的缓存实现,而是根据实际情况,基于C#上做一些环境变量的保存,方便项目使用. 1.系统全局变量 很多时候,在系统运行开始,需要对系统的运行参数进行保存,以便 ...
- centos C++ ccache llvm编译环境配置
下载ccache rpm包wget https://centos.pkgs.org/6/epel-x86_64/ccache-3.1.6-2.el6.x86_64.rpm.htmlyum -y ins ...
- 《JavaScript DOM 编程艺术》 学习笔记
目录 <JavaScript DOM 编程艺术> 学习笔记 第一章 js简史 第二章 js语法 准备工作 语法 第三章 DOM DOM中的D DOM中的O DOM中的M 第四章 js图片库 ...
- 2018年蓝桥杯ava b组第一题
第一题.标题:第几天 2000年的1月1日,是那一年的第1天.那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容 如果问我怎么做的,我就是看日历做的,看了 ...
- Microsoft Visual C++ 14.0 is required,成功解决这个问题!
这个问题我向大家也不一定很好解决的,因为按照这个链接提示的打开,里面的t[mark][/mark]ools 页面早就已经不存在了,我也是看了网上各种各样的解决办法,解决起来是困难,这个提示的意思是缺少 ...
- 利用Python进行数据分析:【Pandas】(Series+DataFrame)
一.pandas简单介绍 1.pandas是一个强大的Python数据分析的工具包.2.pandas是基于NumPy构建的.3.pandas的主要功能 --具备对其功能的数据结构DataFrame.S ...
- 每个人都要学的图片压缩终极奥义,有效解决 Android 程序 OOM
# 由来 在我们编写 Android 程序的时候,几乎永远逃避不了图片压缩的难题.除了应用图标之外,我们所要显示的图片基本上只有两个来源: 来自网络下载 本地相册中加载 不管是网上下载下来的也好,还是 ...
- 坑爹的tp-link管理密码设置
tp-link管理密码最长14位,我设置了15位的密码,突然等不上去,上网发现不少人也有类似情况,后来看到一个文章说tp-link管理密码,可以设置6-15,于是抱着试一试的态度,输入我设置密码的前 ...
- invalid comparison: java.util.ArrayList and java.lang.String解决
报错: Caused by: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause ...