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. Hadoop之HDFS原理及文件上传下载源码分析(上)

    HDFS原理 首先说明下,hadoop的各种搭建方式不再介绍,相信各位玩hadoop的同学随便都能搭出来. 楼主的环境: 操作系统:Ubuntu 15.10 hadoop版本:2.7.3 HA:否(随 ...

  2. DateTime.Now的一些用法

    System.DateTime.Now.ToString("D");   //Tuesday, December 13, 2016 System.DateTime.Now.ToSt ...

  3. MySQL最常用日期时间函数

    日期和时间函数 可能的需求: 当前时间是多少.下个月的今天是星期几.统计截止到当前日期前 3 天的收入总和-- 上述需求就需要使用日期和时间函数来实现: MySQL服务器中的三种时区设置: ①系统时区 ...

  4. 有关 json对象 取出其中数据问题

    这几天,在做一个ajax异步提交的小功能,发现从ashx中传递过来的string 类型的数据,一直拿不到(当时是指的是json点不出来),傻傻的自己,一直在找其他的方法,看看其他那里出了错误,最后,那 ...

  5. 使用Perl提取Excel中的IO_MUX

    使用Perl提取Excel中的IO_MUX 关键问题 提取数据 格式化输出 循环嵌套 数据结构构建 坐标映射,逆向提取关键字 描述 在IC集成中,我们使用Excel表格规划设计的IC引脚功能映射需要转 ...

  6. Set ,List,ArrayList,LinkedList,Vectory,HashMap,Hashtable,HashSet,TreeSet,TreeSet

    Set与List区别: 两者都是接口,并继承Collection接口:List有序,允许重复:Set无序,不能重复: ArrayList与LinkList区别: ArrayList是动态数组,查询效率 ...

  7. 经验分享:如何用grep对PHP进行代码审计

    这是一个常见的误解- 企业需要购买复杂和昂贵的软件来发现应用程序中安全漏洞:而这些专门的软件应用程序,无论是黑盒或白盒,开源或商业,都能很快的发现安全漏洞. 事实是:所有这些专业的漏洞扫描工具都有其特 ...

  8. 使用Apache Spark 对 mysql 调优 查询速度提升10倍以上

    在这篇文章中我们将讨论如何利用 Apache Spark 来提升 MySQL 的查询性能. 介绍 在我的前一篇文章Apache Spark with MySQL 中介绍了如何利用 Apache Spa ...

  9. 使用了UnityEditor中的API,打包时却不能打包UnityEditor的问题

    前段时间写了一篇名叫<Unity使用Windows弹窗保存图片>的文章 然而现在项目进入了测试阶段 就在发布的时候,这个地方出问题了 问题出在using UnityEditor; 如上文章 ...

  10. windows系统局域网内开启远程桌面图解

    需要开启防火墙 默认这里没有远程桌面   添加方法   到此远程桌面已经开好了.