开源解析库 - JSON
Json及其实现
JSON作为一种轻量级的数据交换格式,多被用于跨语言通信(比如CPP与PHP之间的数据交互)。
至于何为JSON,其详细解释参考 官网。
既然是一种格式,那便必然有相应的编码实现。在CPP中,以 jsoncpp 为例,我来阐述 JSON 的具体使用。
jsoncpp不依赖第三方库,只需要包含相关头文件即可,具体的源码可以参考 这里。其语法很简洁,一看就懂,不做赘述。
Json的赋值
Json::Value root;
root["Types"] = Json::Value("名号");
root["Types"] = Json::Value("人物");
root["Attributes"] = Json::Value("生年");
root["Attributes"] = Json::Value("国别");
std::cout << "Json::Value size: " << root.size() << std::endl;
std::cout << "Normal Json::Value: " << root << std::endl;
以上,就是很常见的 Json::Value 的使用。
Json的解析
仅仅是使用 Json::Value 生成特定的格式是不够的,解析也是关键。
先是赋值:
Json::Value root;
Json::FastWriter fast;
Json::Value m_exploit;
root["roleId"] = 10009;
root["exploit"] = 10376;
m_exploit.append(root);
root["roleId"] = 10006;
root["exploit"] = 2447;
m_exploit.append(root);
但我们在实际的跨语言通信中一般不会直接用 Json::Value 进行交互,往往会把它写入 字符串 再传输:
std::string sExploit = fast.write(m_exploit);
值得注意的是, Json::Value 的数据以 换行符 结尾,因此有必要对它稍做处理:
sExploit.erase(sExploit.end()-1);
接着解析:
Json::Value json_value_j;
Json::Reader json_reader_j;
if (json_reader_j.parse(sExploit, json_value_j))
{
std::cout << "json_value_j: " << json_value_j;
int nSize = static_cast<int>(json_value_j.size());
for(int i = 0; i < nSize; ++i)
{
int roleId = json_value_j[i]["roleId"].asInt();
std::cout << "roleId: " << roleId << std::endl;
}
}
解析使用 Json::Reader 的 parse() 函数即可。
提示
Json::Value 类内部使用了 map 容器做存储,所以创建该类型的数据时会以key自动排序。
扩展
有兴趣的话,也可以自己实现 Json 的解析器,语法并不复杂。一个有趣的参考在 这里。
结语
祝观赏本文愉快,版权归我所有,转载随意,但请勿用于邪恶的用途。
开源解析库 - JSON的更多相关文章
- Pugixml一种快速解析XML文件的开源解析库
Pugixml是一个轻量级的C++ XML开源解析库,DOM形式的解析器.接口和丰富的遍历和修改操作,快速的解析,此外支持XPath1.0实现数据查询,支持unicode编码: 使用Pugixml可通 ...
- fastjson是阿里巴巴的开源JSON解析库
fastjson的API十分简洁. String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}&q ...
- iOS开源JSON解析库MJExtension
iOS中JSON与NSObject互转有两种方式:1.iOS自带类NSJSONSerialization 2.第三方开源库SBJSON.JSONKit.MJExtension.项目中一直用MJExte ...
- C++的Json解析库:jsoncpp和boost
C++的Json解析库:jsoncpp和boost - hzyong_c的专栏 - 博客频道 - CSDN.NET C++的Json解析库:jsoncpp和boost 分类: 网络编程 开源库 201 ...
- 几种Java的JSON解析库速度对比
java中哪个JSON库的解析速度是最快的? JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考 了.我们很少会去 ...
- C++的Json解析库:jsoncpp和boost(转)
原文转自 http://blog.csdn.net/hzyong_c/article/details/7163589 JSON(JavaScript Object Notation)跟xml一样也是一 ...
- [Swift通天遁地]七、数据与安全-(3)Cocopods的安装和开源类库对JSON的解析
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- [转]C++的Json解析库:jsoncpp和boost
JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...
- Tomjson - 一个"短小精悍"的 json 解析库
Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符 ...
随机推荐
- MySQL关于Duplicate entry '1' for key 'PRIMARY'错误
今天复习MySQL遇到Duplicate entry '1' for key 'PRIMARY'错误. 原因是主键值为'1'的数据已经存在,主键是唯一的,不可重复.
- EasyUI之Hello world(EasyUI的入门学习)
1:创建一个动态web工程: 去官网http://www.jeasyui.net/download/下载官网文档 我去官网下载的最新版本,个人根据自己的需求下载即可.2:在webConte ...
- Linux学习(一)
Linux系统 1.组成部分 1.1内核负责的功能 1.1.1:系统内存管理 内存管理即管理物理内存和虚拟内存 (通过硬盘实现的,即swap space),长时间为被访问的内存块会被放到虚拟内存中,当 ...
- LED操作
灯上拉 GPIO_InitTypeDef GPIO_InitStruct; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); GPIO_InitS ...
- CSS元素垂直居中方法总结
坚持,坚持,坚持... 以上为自我鼓励,哈哈... ------------------------------------------------- 相信没有真正是尝试过的人应该都和我一样,觉得居中 ...
- JS的Dom树小结
一[DOM树节点] DOM节点分为三大类:元素节点.文本节点.属性节点 文本节点.属性节点,为元素节点的两个子节点: 通过getElement系列方法,可以去到元素节点. 二[查看节点] ...
- 【2017-05-02】winform弹出警告框是否进行增删改操作、记事本制作、对话框控件和输出输入流
一.winform弹出警告框是否进行增删改操作 第一个参数是弹出窗体显示的内容,第二个参数是标题,第三个参数是该弹窗包含确定和取消按钮. 返回的是一个枚举类接收一下. 再进行判断,如果点的是确定按钮, ...
- 【MySql】——MHA+GTID+failover+binlog-server+Atlas
一.环境准备 1.mysql-db01 #系统版本 [root@mysql-db01 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) #内 ...
- static class - 静态类
通常一个普通类不允许声明为静态的,只有一个内部类才可以.这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类. 如下代码所示: 1 public class StaticCls ...
- Oracle12c多租户管理用户、角色、权限
Oracle 数据库 12 c 多租户选项允许单个容器数据库 (CDB) 来承载多个单独的可插拔数据库 (PDB).那么我们如何在容器数据库 (CDB) 和可插拔数据库 (PDB)管理用户权限.背景: ...