开源解析库 - 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格式字符 ...
随机推荐
- Hadoop之HDFS原理及文件上传下载源码分析(上)
HDFS原理 首先说明下,hadoop的各种搭建方式不再介绍,相信各位玩hadoop的同学随便都能搭出来. 楼主的环境: 操作系统:Ubuntu 15.10 hadoop版本:2.7.3 HA:否(随 ...
- DateTime.Now的一些用法
System.DateTime.Now.ToString("D"); //Tuesday, December 13, 2016 System.DateTime.Now.ToSt ...
- MySQL最常用日期时间函数
日期和时间函数 可能的需求: 当前时间是多少.下个月的今天是星期几.统计截止到当前日期前 3 天的收入总和-- 上述需求就需要使用日期和时间函数来实现: MySQL服务器中的三种时区设置: ①系统时区 ...
- 有关 json对象 取出其中数据问题
这几天,在做一个ajax异步提交的小功能,发现从ashx中传递过来的string 类型的数据,一直拿不到(当时是指的是json点不出来),傻傻的自己,一直在找其他的方法,看看其他那里出了错误,最后,那 ...
- 使用Perl提取Excel中的IO_MUX
使用Perl提取Excel中的IO_MUX 关键问题 提取数据 格式化输出 循环嵌套 数据结构构建 坐标映射,逆向提取关键字 描述 在IC集成中,我们使用Excel表格规划设计的IC引脚功能映射需要转 ...
- Set ,List,ArrayList,LinkedList,Vectory,HashMap,Hashtable,HashSet,TreeSet,TreeSet
Set与List区别: 两者都是接口,并继承Collection接口:List有序,允许重复:Set无序,不能重复: ArrayList与LinkList区别: ArrayList是动态数组,查询效率 ...
- 经验分享:如何用grep对PHP进行代码审计
这是一个常见的误解- 企业需要购买复杂和昂贵的软件来发现应用程序中安全漏洞:而这些专门的软件应用程序,无论是黑盒或白盒,开源或商业,都能很快的发现安全漏洞. 事实是:所有这些专业的漏洞扫描工具都有其特 ...
- 使用Apache Spark 对 mysql 调优 查询速度提升10倍以上
在这篇文章中我们将讨论如何利用 Apache Spark 来提升 MySQL 的查询性能. 介绍 在我的前一篇文章Apache Spark with MySQL 中介绍了如何利用 Apache Spa ...
- 使用了UnityEditor中的API,打包时却不能打包UnityEditor的问题
前段时间写了一篇名叫<Unity使用Windows弹窗保存图片>的文章 然而现在项目进入了测试阶段 就在发布的时候,这个地方出问题了 问题出在using UnityEditor; 如上文章 ...
- windows系统局域网内开启远程桌面图解
需要开启防火墙 默认这里没有远程桌面 添加方法 到此远程桌面已经开好了.