首页 前端知识 Jsoncpp介绍

Jsoncpp介绍

2024-06-06 00:06:28 前端知识 前端哥 843 635 我要收藏

1.简介

Jsoncpp 是一个 C++ 库,用于解析和生成 JSON 数据。它提供了一个易于使用的 DOM(Document Object Model)风格的 API,允许开发者以树形结构的方式操作 JSON 数据。
Jsoncpp 是一个C++库,允许操作JSON值,包括对字符串的序列化和反序列化。它还可以在非序列化/序列化步骤中保留现有注释,使其成为存储用户输入文件的方便格式。

JSONCpp 的主要特点包括:

  • DOM 风格 API:Jsoncpp 提供了类似 JavaScript 的对象和数组操作方式,使得操作 JSON 数据变得直观。
  • 解析和生成:Jsoncpp 可以解析 JSON 字符串并将其转换为 C++ 对象,也可以将 C++ 对象转换为 JSON 字符串。
  • 异常处理:Jsoncpp 在解析错误时抛出异常,允许开发者以异常处理机制来管理错误。
  • 跨平台

版本说明:

  • 1.y.z是用C++11构建的。
  • 0.y.z可以与较旧的编译器一起使用。
  • 00.11.z既可以在旧编译器中使用,也可以在新编译器中使用。

主要版本保持二进制兼容性。

2.环境搭建

下载地址:https://github.com/open-source-parsers/jsoncpp
选择1.95版本,使用C++11构建的。
在这里插入图片描述
编译,使用cmake编译
在这里插入图片描述
编译完成生成库。
在这里插入图片描述
配置包含目录和lib目录。
在这里插入图片描述
在这里插入图片描述

3.代码示例

写文件

#include <iostream>
#include <json/json.h>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
	Json::Value root;

	// 添加一些数据
	root["name"] = "John Doe";
	root["age"] = 30;
	root["sex"] = "male";

	// 创建一个 JSON 数组
	root["courses"].append("Math");
	root["courses"].append("Physics");
	root["courses"].append("Chemistry");

	//新建两个value对象,作为calssmate的值
	Json::Value classmate1;
	classmate1["name"] = "lisi";
	classmate1["age"] = "20";
	classmate1["sex"] = "male";

	Json::Value classmate2;
	classmate2["name"] = "wangwu";
	classmate2["age"] = "20";
	classmate2["sex"] = "male";

	root["classmate"].append(classmate1);
	root["classmate"].append(classmate2);

	//输出带格式的字符串
	Json::StyledWriter sw;

	//输出到文件
	std::ofstream os;
	os.open("test.json", ios::out);
	if (!os.is_open())
		cout << "can not find or create test.json" << endl;
	os << sw.write(root);
	os.close();
}

运行结果:
在这里插入图片描述
读取json解析:

#include <iostream>
#include <json/json.h>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
	Json::Reader read;
	Json::Value root;
	//读取json文件
	ifstream in("test.json");
	//解析到root
	read.parse(in, root);
	//按键值对读取
	Json::Value::Members keys = root.getMemberNames();
	for (int i = 0; i < keys.size(); i++)
	{
		cout << keys.at(i) << " : ";
		if (root[keys[i]].isString()) {
			cout << root[keys[i]].asString();
		}
		if (root[keys[i]].isInt()) {
			cout << root[keys[i]].asInt();
		}
		else if (root[keys[i]].isArray())
		{
			cout << "[ ";
			for (int j = 0; j < root[keys[i]].size(); j++) 
			{
				Json::Value item = root[keys[i]][j];
				if (item.isString())
				{
					cout << item.asString() << ", ";
				}
				else if (item.isObject()) 
				{
					cout << "{ " << endl;;
					Json::Value::Members subItems = item.getMemberNames();
					for (int k = 0; k < subItems.size(); k++) 
					{
						cout << subItems.at(k) << " : " << item[subItems[k]] << endl;
					}
					cout << "}" << endl;
				}
			}
			cout << "]";
		}
		cout << endl;
	}

	return 0;
}

运行结果:
在这里插入图片描述

4.更多参考

libVLC 专栏介绍-CSDN博客

Qt+FFmpeg+opengl从零制作视频播放器-1.项目介绍_qt opengl视频播放器-CSDN博客

QCharts -1.概述-CSDN博客

JSON++介绍

RapidJSON介绍

转载请注明出处或者链接地址:https://www.qianduange.cn//article/10972.html
标签
jsoncpp
评论
发布的文章

js 指定光标位置

2024-06-10 23:06:55

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!