json解析库的使用

前言:

使用官方json.cpp解析库解析json文件

#include <json\json.h>
#pragma comment(lib, "lib_json.lib")
/************************/
/*json写操作*/
/************************/
void json_write_test()
{
	Json::Value json_temp;
	json_temp["name"] = Json::Value("测试名字");
	json_temp["age"] = Json::Value(17);
	json_temp["job"] = Json::Value("c++工程师");

	Json::Value root;  // 表示整个 json 对象
	root["key_string"] = Json::Value("value_string");   // 赋予字符串值:"value_string"。
	root["key_number"] = Json::Value(12345);            // 赋予数值:12345。
	root["key_boolean"] = Json::Value(false);           // 赋予bool值:false。
	root["key_double"] = Json::Value(12.345);           // 赋予 double 值:12.345。
	root["key_object"] = json_temp;                     // 赋予 json::Value 对象值。
	root["key_array"].append("array_string");           // 类型为数组,对第一个元素赋值为字符串:"array_string"。
	root["key_array"].append(1234);                     // 为数组 key_array 赋值,对第二个元素赋值为:1234。
	Json::ValueType typeone = root.type();              // 获得 root 的类型,此处为 objectValue 类型。
	Json::ValueType typetwo = root["key_number"].type();// 获得 root 中某一个字段的类型
	Json::FastWriter json_write;
	std::string str_json = json_write.write(root);      // 获得 root 的内容
	std::string num_json = json_write.write(root["key_array"]); //获得 root中某个字段 的内容

	Json::StyledWriter json_stylewrite;
	std::string str_style_json = json_stylewrite.write(root);//获取root的内容并且格式化输出
	std::string arr_style_json = json_stylewrite.write(root["key_array"]);
	int x=1;
}

/************************/
/*json读操作*/
/************************/
void json_read_test()
{
	//读json字符串
	std::string str_json;
	str_json.assign("{\"name\": \"weir\",\"id\": 10,\"job\": \"engineer\",\"pay\": 123.4}");
	Json::Value json_read;
	Json::Reader reader;
	reader.parse(str_json.c_str(), json_read);
	std::string strJob = json_read["job"].asString();

	//读json文件
	std::string str_file_path;
	str_file_path.assign("C://test.json");
	Json::Value json_read_file;
	Json::Reader reader_file;
	std::ifstream is;
	is.open(str_file_path.c_str(), std::ios::binary);
	if (reader_file.parse(is, json_read_file))
	{
		std::string code;
		if (!json_read_file["files"].isNull())//访问节点是否为空
		{
			code = json_read_file["uploadid"].asString();//取节点内容
			code = json_read_file.get("uploadid", "null").asString();

			//获取files的数组个数
			int arr_file_size = json_read_file["files"].size();
			for (int i = 0; i < arr_file_size; i++)
			{
				Json::Value val_image = json_read_file["files"][i]["images"];
				int image_size = val_image.size();
				for(int j = 0; j < image_size; ++j)
				{
					std::string type = val_image[j]["type"].asString();
					std::string url = val_image[j]["url"].asString();
				}
			}
		}
	}
	//把从文件中读取出来的内容格式化为json字符串
	Json::StyledWriter json_stylewrite;
	std::string str_style_json = json_stylewrite.write(json_read_file);

	is.close();
}

// test.json文件内容
// {
// 		"id": "0001",
// 		"code": "0",
// 		"msg": "",
// 		"files":
// 	[
// 	{
// 		"code": "0",
// 			"msg": "",
// 			"filename": "1.jpg",
// 			"filesize": "1000",
// 			"width": "1024",
// 			"height": "682",
// 			"images":
// 		[
// 		{
// 			"url": "qq.com",
// 				"type": "large",
// 				"width": "720",
// 				"height": "479"
// 		},
// 		{
// 			"url": "qq.com",
// 				"type": "main",
// 				"width": "200",
// 				"height": "133"
// 			}
// 		]
// 	}
// 	]
// }
//在json中添加内容
void json_add_data_test()
{
	std::string str_file_path;
	str_file_path.assign("C://test.json");
	Json::Value json_read_file;
	Json::Reader reader_file;
	std::ifstream is;
	is.open(str_file_path.c_str(), std::ios::binary);
	reader_file.parse(is, json_read_file);

	Json::Value arrayObj;   // 构建对象
	Json::Value new_item, new_item1;
	new_item["date"] = "2011-12-28";
	new_item1["time"] = "22:30:36";
	arrayObj.append(new_item);  // 插入数组成员
	arrayObj.append(new_item1); // 插入数组成员
	int file_size = json_read_file["files"].size();
	for(int i = 0; i < file_size; ++i)
	{
		json_read_file["files"][i]["exifs"] = arrayObj;   // 插入原json中
		json_read_file["files"][i]["name"] = "weir";
	}
	//把从文件中读取出来的内容格式化为json字符串
	Json::StyledWriter json_stylewrite;
	std::string str_style_json = json_stylewrite.write(json_read_file);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-02 10:10:05

json解析库的使用的相关文章

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

fastjson的API十分简洁. String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}", VO.class); //反序列化 https://github.com/alibaba/fastjson/wiki/Quick-Start-CN fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

.Net Core下一次针对dpz2.Json和Newtonsoft.Json解析库的简单测试

关于dpz2.Json dpz2.Json是大胖子软件的自研Json解析库. 应用于更加简单的使用场景 在dpz2.Json诞生之前,我们一直使用的是Newtonsoft.Json解析库,Newtonsoft.Json最方便的地方是采用了类似JavaBean的绑定方式进行操作,但是实际操作时,我们可能更多时候只想要个解析器,好让我们能快速的辨别数据,这个时候,单纯的JavaBean方式又变得比较肘制,读取数据使用C#的动态类型确实可以比较方便的进行操作. 专注于直接操作 另外一个促使我们自研一个

Android JSON 解析库的使用 - Gson 和 fast-json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C.C++.C#.Java.JavaScript.Perl.Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率). GSON是由谷歌官方推出的 JSON 与 Java 对象转化的 Java类库 fast-json 阿里推

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

java中哪个JSON库的解析速度是最快的? JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考 了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它们的确是不太一样的.因此,我们运行了一个基准测试来对常用的几个JSON库进行了测 试,看看在解析不同大小的文件时哪个库的速度是最快的.下面我会把结果分享给大家. JSON通常用于传输及解析大文件.这对运行在Hadoop或者是Spark集群上的数据处理程

75、JSON 解析库---FastJson, Gson

JSON 的简介: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.用于数据转换传输, 通用于PHP,Java,C++,C#,Python等编程语言数据交换传输. 易于人阅读和编写,同时也易于机器解析和生成. 基本结构:对象.数组. Gson 的简介和特点: Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. 快速.高效 代码量少

几种java JSON解析库的评测单元测试及源码

迷信了很长时间的阿里,但今天突然做了一些json库的测试,结果大跌眼镜,评测 结果是,org.json库与org.simple.json库相差不多,在一个数量级,但是阿里fastjson. net.sf.json库和Gson速度最慢.或许已经有人想喷了,但我就是呈现一个测试结果, 欢迎来指导我理解的不足,或许阿里还有很多特殊的泛型的处理和类型转换我没有用 到,本帖的所要阐明的是处理字符串解析并取得对象的一些属性没有涉及泛型时的速 度评测. 评测结果如图: 源码如下: import junit.f

Android开源库--Gson谷歌官方json解析库

官方文档地址:http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html 官方网站:http://code.google.com/p/google-gson/ json官方网站:http://www.json.org/json-zh.html 目前主流数据传输都用的是json,解析json并且转换成相应的类型就成了必经之路. 在没有使用gson之前,原生Andoird自带有类解析json,但是实在不方便使用.

Cocos2d-x3.0 Json解析

在Cocos2dx3.0下,JSON解析库官方已经集成好了.我们引用就OK. JSON文件hello.json内容 {"pets":["dog","cat"],"stuInfo":{"stuAge":"23","stuName":"zhangsan","birthday":"1990-01-12"},&quo