相关文章推荐
愉快的匕首  ·  linux - Install ...·  1 年前    · 
俊秀的回锅肉  ·  [Gankly] View animate ...·  1 年前    · 

感谢开源! git上有很多解析json的库文件,比如常见的JsonCpp、cJSON等,这些都能满足正常使用。但一旦有了速度、轻量化、简便的追求,就不得不比较一下各个库的优劣了。
荡某乎上的一张各种比较json的性能图,可以看出,rapdJson处于领先地位!
楼主自从体验了rapidJson,就果断放弃了JsonCpp,原因也很简单!

RapidJson的github地址:
https://github.com/Tencent/rapidjson

  • 只有头文件,也只需要包含头文件!jsoncpp还需要内置编译或编译成库,麻烦
  • 只支持标准的json文件,不标准的不支持,按照标准来,节约成本!
  • 当然,缺点也很明显,代码接口复杂,代码量比较大

某知乎地址:
https://www.zhihu.com/question/23654513
在这里插入图片描述

一、解析json文件的Demo

char *pchJsonPath = "config.json";
std::ifstream file(pchJsonPath);
std::string strJson((std::istreambuf_iterator<char>(file)),
	std::istreambuf_iterator<char>());
rapidjson::Document doc;
doc.Parse(strJson.c_str());

解析后,需要判断一下解析是否成功

if (doc.HasParseError())
	printf("解析json文件失败,请检查json是否正确!\n");

然后再将赋值给json中的Value,

rapidjson::Value& jsonObj = doc;

这里的Value就相当于字典

1、解析json中的Std所保存的Float值

if (jsonObj.HasMember("Std")) // 一定要判断,如果没有key,会导致代码直接报错
	tOpenParam.fStd = jsonObj["Std"].GetFloat();
	printf("请检查,key中没有发现 Std");
	hr = E_INVALIDARG;

2、解析json中的数组

if (jsonInputNode.HasMember("Shape"))
		rapidjson::Value& jsonShape = jsonInputNode["Shape"];
		if (jsonShape.IsArray())
			for (rapidjson::SizeType idxType = 0; idxType < jsonShape.Size(); ++idxType)
				std::cout << jsonShape[idxType].GetInt() << " ";

3、解析字符串

if (jsonObj.HasMember("DeviceType"))
	std::string strDeviceType = jsonObj["DeviceType"].GetString();

每次都需要检查,代码量就显的比较大,也比较杂乱,这也劝退了一部分人,所以最好在原来的基础上,再封装一层代码,比如用CKECK_ERROR来替换jsonObj.HasMember

感谢开源! git上有很多解析json的库文件,比如常见的JsonCpp、cJSON等,这些都能满足正常使用。但一旦有了速度、轻量化、简便的追求,就不得不比较一下各个库的优劣了。荡某乎上的一张各种比较json的性能图,可以看出,rapdJson处于领先地位!楼主自从体验了rapidJson,就果断放弃了JsonCpp,原因也很简单!RapidJson的github地址:https://github.com/Tencent/rapidjson只有头文件,也只需要包含头文件!jsoncpp还需要内置
RapidJSON 是一个 C++JSON 解析器及生成器。它的灵感来自 RapidXml。使用方法:RapidJSON: 首页http://rapidjson.org/zh-cn/index.html 这里 rapidjson 为作用域; 那么现在该 JSON 就会被解析至 中,成为一棵 *DOM 树 *: 让我们查询一下根 Object 中有没有 成员。由于一个 可包含不同类型的值,我们可能需要验证它的类型,并使用合适的 API 去获取其值。在此例中, 成员关联
利用rapidjson实现未知json数据的解析,拿到每一个key和value,用vs2010实现。 引用头文件 #include "rapidjson/document.h" #include using namespace std; string strJsonTest = "{\"item_1\":\"value_1\",\"item_2\":\"value_2\"
...//获取到fcgiRetData数据 Json::StyledWriter styledWriter; string response = styledWriter.write(fcgiRetData);//将fcgiRetData的json数据格式化 转载:C++解析JSON格式数据 1:封装JSON数据为string std::string DataToJson() Json::FastWriter writerinfo; jsoncpp 是一个可以与 JSON 进行交互的C++。官网定义如下: jsoncpp is an implementation of a JSON reader and writer in C++. 通过使用 jsoncpp ,我们可以对 JSON 进行读写。 2 示例代码 2.1 从字符串中...
现在c++其实实现都差不多,因为没有c++没有反射功能,所以只能按照键值对方式组合和解析。每个原理差不多,主要是接口的实现。目前有很多了,只介绍4个。json11,rapidjson,jsoncpp,nlohmann大家自己查阅官方文档吧,总体都是类似map这样的。用jsoncpp举例,主要就是value类型 很多的使用都是这样的。nlohmann需要实现解析过程。以下是json字符串解析: 如果需要将json字符串与结构体转换
关于 Json 这种数据格式,在前面已经做了详细的介绍Json 的格式和用途,在项目开发过程中我们需要针对不同的语言使用不同的Json 格式的数据进行解析,下面给大家介绍一个基于 C 语言的 Json – cJson。cJSON 是一个超轻巧,携带方便,单文件,简单的可以作为 ANSI-C 标准的 JSON 解析器。 cJSON 是一个开源项目,github 下载地址: https://github.com/DaveGamble/cJSON cJSON,目前来说,主要的...
文章目录1 JSON文件简介[1]1.1 JSON文件的语法规则1.2 JSON值的类型2 JSON文件解析 1 JSON文件简介[1] 一个项目在设计时会存在很多参数,比如data文件路径、外设名称与相关参数、文件储存路径等等,这些参数根据实际需要可能需要修改的频率比较频繁,如果放在程序里面不仅查找比较麻烦,而且每次修改完就得重新编译一次,超级麻烦。所以可以将这种类型的参数文件都放在一个文本里面,然后设计一个函数接口来读取这些参数并存储在结构体或者其它类型的容器中。 之前为了方便将参数写进了TXT中,ke