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的更多相关文章

  1. Pugixml一种快速解析XML文件的开源解析库

    Pugixml是一个轻量级的C++ XML开源解析库,DOM形式的解析器.接口和丰富的遍历和修改操作,快速的解析,此外支持XPath1.0实现数据查询,支持unicode编码: 使用Pugixml可通 ...

  2. fastjson是阿里巴巴的开源JSON解析库

    fastjson的API十分简洁. String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}&q ...

  3. iOS开源JSON解析库MJExtension

    iOS中JSON与NSObject互转有两种方式:1.iOS自带类NSJSONSerialization 2.第三方开源库SBJSON.JSONKit.MJExtension.项目中一直用MJExte ...

  4. C++的Json解析库:jsoncpp和boost

    C++的Json解析库:jsoncpp和boost - hzyong_c的专栏 - 博客频道 - CSDN.NET C++的Json解析库:jsoncpp和boost 分类: 网络编程 开源库 201 ...

  5. 几种Java的JSON解析库速度对比

    java中哪个JSON库的解析速度是最快的? JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考 了.我们很少会去 ...

  6. C++的Json解析库:jsoncpp和boost(转)

    原文转自 http://blog.csdn.net/hzyong_c/article/details/7163589 JSON(JavaScript Object Notation)跟xml一样也是一 ...

  7. [Swift通天遁地]七、数据与安全-(3)Cocopods的安装和开源类库对JSON的解析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. [转]C++的Json解析库:jsoncpp和boost

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...

  9. Tomjson - 一个"短小精悍"的 json 解析库

    Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符 ...

随机推荐

  1. png、jpg、gif三种图片格式的区别

    png.jpg.gif三种图片格式的区别   2014-06-17 为什么想整理这方面的类容,我觉得就像油画家要了解他的颜料和画布.雕塑家要了解他的石材一样,作为网页设计师也应该对图片格式的特性有一定 ...

  2. memcached分布式缓存

    1.memcached分布式简介 memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能.Memcache集群主机不能够相互通信传输数据,它的“分布式”是基于客户端的程序逻辑算 ...

  3. MongoDB数据库安装及配置环境终极教程(windows10系统)

    本文是笔者花时间踩坑踩生气了写出来的!转载请注明出处@http://www.cnblogs.com/tim100/!请尊重我的劳动成果!谢谢! 今天,给大家说说在windows10系统下MongoDB ...

  4. 纯原生javascript实现分页效果

    随着近几年前端行业的迅猛发展,各种层出不穷的新框架,新方法让我们有点眼花缭乱. 最近刚好比较清闲,所以没事准备撸撸前端的根基javascript,纯属练练手,写个分页,顺便跟大家分享一下 functi ...

  5. CF #356 div1 A. Bear and Prime 100

    题目链接:http://codeforces.com/contest/679/problem/A CF有史以来第一次出现交互式的题目,大致意思为选择2到100中某一个数字作为隐藏数,你可以询问最多20 ...

  6. CF Educational Codeforces Round 10 D. Nested Segments 离散化+树状数组

    题目链接:http://codeforces.com/problemset/problem/652/D 大意:给若干个线段,保证线段端点不重合,问每个线段内部包含了多少个线段. 方法是对所有线段的端点 ...

  7. java Http消息传递之POST和GET两种方法

    /** * 通过Get方法来向服务器传值和获取信息, * 这里举例假设的前提是,链接上服务器,服务器直接发送数据给本地 * * 大体的思路: * 1.首先通过URL地址来获得链接的借口 * 通过接口, ...

  8. 什么是Actor

    本文已.Net语法为主,同时写有Scala及Java实现代码 严肃的说,演员是一个广泛的概念,作为外行人我对Actor 模型的定义: Actor是一个系统中参与者的虚拟人物,Actor与Actor之间 ...

  9. 数据仓库Hive数据导入导出

    Hive库数据导入导出 1.新建表data hive (ebank)> create table data(id int,name string) > ROW FORMAT DELIMIT ...

  10. [Day03] 循环语句、list相关练习题

    用户输入两个数,求平均值. 让用户一直输入数字,如果输入的是'0',终止程序打印所有数字之和. 让用户一直输入数字(只输入数字),如果没输入任何值,终止程序打印所有输入数字的平均值. 求出这个list ...