利用 jsoncpp 读取数组和对象例子

/*
test1.json文件 [数组]
[
 [2.0,5.6],
 [5.2,9.6]
]


*/

/*
test2.json文件  [对象]
{
	"backupIP": "localhost",
	"code": 0,
	"discovery": "http://127.0.0.1/api",
	"port": "8000",
	"priorIP": "127.0.0.1"
}

*/

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include "jsoncpp\json\json.h"
using namespace std;

//读取文件中的对象
bool readFileJsonObj(const char *_Filename)
{
	if (_Filename == NULL)
	{
		std::cout << "_Filename || pSampledata == null erro!\n";
		return false;
	}

	Json::Reader reader;
	Json::Value root;

	//从文件中读取,保证当前文件有data.json文件
	std::ifstream in(_Filename, ios::binary);

	if( !in.is_open() )  
	{ 
		std::cout << "Error open: " <<_Filename<<std::endl; 
		return false; 
	}

	/*

	{
	"backupIP": "localhost",
	"code": 0,
	"discovery": "http://127.0.0.1/api",
	"port": "8000",
	"priorIP": "127.0.0.1"
	}

	*/
	if(reader.parse(in,root))
	{

		int nCode = root.get("code", "").asInt();
		std::cout<<nCode<<" , ";
		std::cout<<root.get("priorIP", "").asString()<<" , ";
		std::cout<<	root.get("backupIP", "").asString()<<" , ";
		std::cout<<root.get("port", "").asString()<<" , ";
		std::cout<<root.get("discovery", "").asString()<<std::endl;


	}
	in.close();
	return true;
}

//从文件中读取JSON  数组
bool readFileJson(const char *_Filename)
{
	if (_Filename == NULL)
	{
		std::cout << "_Filename || pSampledata == null erro!\n";
		return false;
	}

	Json::Reader reader;
	Json::Value root;

	//从文件中读取,保证当前文件有data.json文件
	std::ifstream in(_Filename, ios::binary);

	if( !in.is_open() )  
	{ 
		std::cout << "Error open: " <<_Filename<<std::endl; 
		return false; 
	}

	/*
	json
	[
	[2.0,5.6],
	[5.2,9.6]
	]

	*/

	int nTatolSize = 0;
	if(reader.parse(in,root))
	{

		int ns = root.size();
		//读取数组信息
		for(unsigned int i = 0; i < ns; i++)
		{
			Json::Value tmp = root[i];
			nTatolSize += tmp.size();  

		}
		std::cout<<"nTatolSize : "<<nTatolSize <<"\n";
		for(unsigned int i = 0; i < ns; i++)
		{
			Json::Value tmp = root[i];
			int image_size = tmp.size();  

			for(int j = 0; j < image_size; ++j)  
			{  
				float fvalue= tmp[j].asFloat(); 
				std::cout<<"value : "<<fvalue <<" , ";
			} 
			std::cout<<"\n";
		}

	}
	in.close();
	return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
	readFileJson("test1.json");
	readFileJsonObj("test2.json");
	return 0;
}

 

### 回答1: JSONCPP是一个用于解析和生成JSON数据的C++库。要读入数组,首先需要导入jsoncpp库,并包含相关的头文件: ```cpp #include <iostream> #include <fstream> #include <json/json.h> ``` 然后,可以使用Json::Value对象来解析JSON数据。假设我们有一个JSON文件,存储了一个包含多个元素的数组,文件名为data.json: ```json { "array": [1, 2, 3, 4, 5] } ``` 我们可以按照以下步骤读入数组: ```cpp int main() { // 读取JSON文件 std::ifstream file("data.json"); std::string str; // 将文件内容读入字符串 if (file) { file.seekg(0, std::ios::end); str.reserve(file.tellg()); file.seekg(0, std::ios::beg); str.assign((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); file.close(); } // 解析JSON数据 Json::Value root; Json::CharReaderBuilder builder; Json::CharReader* reader = builder.newCharReader(); std::string errors; // 解析字符串为JSON对象 bool parsingSuccessful = reader->parse(str.c_str(), str.c_str() + str.size(), &root, &errors); if (!parsingSuccessful) { std::cout << "Failed to parse JSON: " << errors; return 1; } // 读取数组 Json::Value array = root["array"]; if (array.isArray()) { for (int i = 0; i < array.size(); ++i) { std::cout << array[i].asInt() << " "; } } return 0; } ``` 以上代码读取JSON文件data.json,将其内容解析为JSON对象,并获取其中名为"array"的数组。然后,我们遍历数组中的每个元素,并打印出来。输出结果为: ``` 1 2 3 4 5 ``` 这样就实现了使用jsoncpp读入数组的功能。 ### 回答2: 使用jsoncpp读取数组可以分为以下几个步骤: 1. 引入jsoncpp库,可以从官方网站https://github.com/open-source-parsers/jsoncpp下载源码,并进行编译安装。 2. 在代码中包含json.h头文件。 3. 定义一个Json::Value对象来存储读入的JSON数据。 4. 使用Json::Reader对象来解析json字符串并存储到Json::Value对象中。 下面是一个简单的示例代码: ```cpp #include <json/json.h> #include <iostream> #include <fstream> #include <string> int main() { std::ifstream file("data.json"); // 打开json文件 Json::Value root; // 定义一个Json::Value对象 Json::Reader reader; // 定义一个Json::Reader对象 if (!reader.parse(file, root)) { // 解析json文件 std::cout << "解析错误!" << std::endl; return 1; } file.close(); // 关闭文件 Json::Value arrayValue = root["array"]; // 获取json中的数组 if (!arrayValue.isArray()) { // 判断是否为数组 std::cout << "不是一个有效的数组!" << std::endl; return 1; } for (int i = 0; i < arrayValue.size(); i++) { // 遍历数组 std::cout << "数组元素" << i << ": " << arrayValue[i].asString() << std::endl; } return 0; } ``` 假设data.json文件的内容为: ```json { "array": [ "元素1", "元素2", "元素3" ] } ``` 上述代码将会输出: ``` 数组元素0: 元素1 数组元素1: 元素2 数组元素2: 元素3 ``` 这样就完成了使用jsoncpp读取数组的操作。 ### 回答3: JSONCpp是一个用于处理JSON格式数据的C++库。它可以读取JSON格式的数据,并提供了相应的方法和函数来解析和访问JSON中的数据。 要读入一个JSON数组,可以按照以下步骤进行操作: 1. 首先,引入JSONCpp的头文件和命名空间: ```cpp #include <json/json.h> using namespace Json; ``` 2. 创建一个`Value`对象来保存JSON数据: ```cpp Value root; ``` 3. 使用`Reader`类的`parse`方法来解析JSON数据,并将解析结果保存到`Value`对象中: ```cpp Reader reader; if (!reader.parse(jsonData, root)) { // 解析失败 } ``` 其中,`jsonData`是一个字符串,用于存储JSON数据。 4. 确认解析结果是否为数组类型,若不是数组类型则表示解析失败: ```cpp if (!root.isArray()) { // JSON数据不是数组类型 } ``` 5. 遍历数组,可以使用循环来逐个访问数组的元素: ```cpp for (unsigned int i = 0; i < root.size(); i++) { // 访问数组元素 Value element = root[i]; // 对元素进行处理... } ``` 通过以上步骤,就可以成功读取JSON数组中的数据了。注意需要根据实际情况进行错误处理和数据类型的判断,以确保程序能正确地读取和处理JSON数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值