C/C++读写JSON数据的详细过程记录
什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于读写和解析,同时也易于机器生成和解析。JSON文本格式在互联网上广泛应用,尤其在Web应用中,如:动态数据的传输。常用于替代XML格式,因为JSON格式更加简洁、易读、易于解析和生成。
读取JSON数据
使用JSON解析库可以轻松读取JSON文件中的数据。在C/C++中比较常用的JSON解析库有JSON库、RapidJSON库、Jansson库等。
以RapidJSON库为例,以下是读取JSON数据的过程:
- 引入头文件
#include "rapidjson/document.h"
- 定义变量及其类型
定义一个rapidjson的Document对象,用于解析JSON数据:
rapidjson::Document document;
- 读取JSON文件
将JSON文件读入字符串中,使用rapidjson解析为Document对象:
std::string json_str = "{'name': '张三', 'age': 23}";
document.Parse(json_str.c_str());
- 获取JSON数据
通过Document对象,可以获取JSON数据:
std::string name = document["name"].GetString();
int age = document["age"].GetInt();
写入JSON数据
使用JSON库可以轻松生成JSON数据并写入文件中。以下是写入JSON数据的过程:
- 引入头文件
#include "json/json.h"
- 定义变量及其类型
定义一个JSON的Value对象,作为JSON数据的容器。
Json::Value root;
- 添加JSON数据
将JSON数据添加到Value对象中:
root["name"] = "张三";
root["age"] = 23;
- 序列化JSON数据
将JSON数据序列化成字符串:
Json::FastWriter writer;
std::string json_str = writer.write(root);
- 将JSON数据写入文件
将JSON数据字符串写入到文件中:
std::ofstream ofs("data.json");
ofs << json_str;
ofs.close();
示例
下面以使用RapidJSON库解析JSON文件和使用JSON库生成JSON文件为示例:
解析JSON文件例子
假设有如下的JSON文件:
{
"name": "张三",
"age": 23,
"contacts": [
{"name": "李四", "phone": "13333333333"},
{"name": "王五", "phone": "14444444444"}
]
}
- 引入头文件
#include <iostream>
#include <fstream>
#include "rapidjson/document.h"
- 定义变量及其类型
定义一个Document对象,用于解析JSON数据:
rapidjson::Document document;
- 读取JSON文件
将JSON文件读入字符串中,使用rapidjson解析为Document对象:
std::ifstream ifs("data.json");
std::string json_str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
document.Parse(json_str.c_str());
- 获取JSON数据
通过Document对象,可以获取JSON数据:
std::string name = document["name"].GetString();
int age = document["age"].GetInt();
const rapidjson::Value& contacts = document["contacts"];
for (rapidjson::SizeType i = 0; i < contacts.Size(); i++) {
std::string contact_name = contacts[i]["name"].GetString();
std::string contact_phone = contacts[i]["phone"].GetString();
}
生成JSON文件例子
- 引入头文件
#include <iostream>
#include <fstream>
#include "json/json.h"
- 定义变量及其类型
定义一个JSON的Value对象,作为JSON数据的容器。
Json::Value root;
- 添加JSON数据
将JSON数据添加到Value对象中:
root["name"] = "张三";
root["age"] = 23;
Json::Value contacts;
Json::Value contact1;
contact1["name"] = "李四";
contact1["phone"] = "13333333333";
Json::Value contact2;
contact2["name"] = "王五";
contact2["phone"] = "14444444444";
contacts.append(contact1);
contacts.append(contact2);
root["contacts"] = contacts;
- 序列化JSON数据
将JSON数据序列化成字符串:
Json::FastWriter writer;
std::string json_str = writer.write(root);
- 将JSON数据写入文件
将JSON数据字符串写入到文件中:
std::ofstream ofs("data.json");
ofs << json_str;
ofs.close();
结语
以上就是C/C++读写JSON数据的详细过程。无论是读取JSON文件还是生成JSON文件,使用JSON库或RapidJSON库都是非常简单的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C/C++读写JSON数据的详细过程记录 - Python技术站