JSON CPP使用

1.JSON CPP介绍

此部分,我想可以直接从GitHub上看到介绍,简而言之,JsonCPP,即一种C++中比较稳定的处理Json的库。

2. Windows平台JSON CPP编译

2.1 源码下载

推荐直接去github下载最新代码,看看网上到处的文章都是在各种抄袭,推荐的地址还是sourceforge上的链接,版本是0.5,那是个很早就不在维护的了吧。
git clone https://github.com/open-source-parsers/jsoncpp.git

2.2 VS编译

我们首先来看看clone下来的代码文件结构,src里面是jsoncpp源码,里面也包含一个小demo。在使用VS编译所需的dll、lib时,我们只需运行makefiles目录下的.sln工程即可生成所需静态库lib_json.lib
在这里插入图片描述

2.3 VS工程设置

在上一步我们编译jsoncpp库成功之后,和所有的工程加载第三方库一样的道理。
第一步:Linker->General->Additional Library Directories 选择lib库所在目录(PS:只需把上一步编译后生成的lib库拷贝过来即可)
注意:debug项目对应生成的debug库,release项目对应生成的release库
在这里插入图片描述
第二步:Linker->Input->Additional Dependenies,填写lib_json.lib(即jsoncpp编译所得lib库名称)即可。
在这里插入图片描述

3. 实战

3.1 JSON读取

示例:需要解析的JSON文件如下所示:

{
   
   
	"name": "xml",
	"displayName": "%displayName%",
	"description": "Þscription%",
	"version": "1.1.1",
	"is_english": true,
	"publisher": "vscode",
	"engines": {
   
   
		"vscode": "*++++++++++++++"
	},
	"contributes": {
   
   
		"languages": [{
   
   
			"id": "xml",
			"extensions": [
				".xml",
				".xsd",
				".svg",
				".targets",
				".tld",
				".tmx",
				".vbproj",
				".vbproj.user",
				".vcxproj",
				".vcxproj.filters"
			],
			"firstLine": "(\\<\\?xml.*)|(\\<svg)|(\\<\\!doctype\\s+svg)",</
### 如何在 C++ 中解析 JSON使用 JSON 库 #### 解析 JSON 的常见库 C++ 提供多种用于处理 JSON 数据的第三方库,这些库能够帮助开发者轻松实现 JSON 文件的读取、写入以及解析功能。以下是几种常用的 JSON 处理库及其特点: - **Boost.JSON**: Boost 是一个强大的 C++ 库集合,其中包含了专门用于处理 JSON 数据的部分——`boost::json`[^1]。该模块提供了丰富的接口支持 JSON 对象的操作,例如序列化和反序列化。 - **Qt JSON**: 如果项目已经依赖于 Qt 框架,则可以利用其内置的支持来操作 JSON 数据结构。通过 `QJsonDocument`, `QJsonObject`, 和 `QJsonArray` 类型,可以方便地加载、修改并保存 JSON 格式的文档[^4]。 - **nlohmann/json**: 这是一个简单易用且高效的单头文件库,它允许以接近原生的方式访问复杂的嵌套对象,并且兼容标准 STL 容器与算法。 #### 示例代码展示 下面分别给出基于上述提到的不同库的一个基本例子说明如何从字符串形式转换成可查询的对象表示法。 ##### 使用 nlohmann/json 库 ```cpp #include <iostream> #include <nlohmann/json.hpp> int main(){ using json = nlohmann::json; std::string jsonString = R"({"name": "John", "age": 30})"; auto j = json::parse(jsonString); std::cout << "Name: " << j["name"] << ", Age: " << j["age"] << "\n"; return 0; } ``` ##### 使用 Qt JSON 模块 ```cpp #include <QCoreApplication> #include <QDebug> #include <QJsonDocument> #include <QStringList> void parseWithQt(const QByteArray& jsonData){ QJsonDocument doc(QJsonDocument::fromJson(jsonData)); if(doc.isObject()){ const QJsonObject obj = doc.object(); qDebug() << "Name:" << obj.value("name").toString() << ",Age:" << obj.value("age").toInt(); } } int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); QByteArray data(R"({"name":"Jane","age":27})"); parseWithQt(data); return a.exec(); } ``` ##### 使用 Boost.JSON 库 ```cpp #include <boost/json/src.hpp> // Include this line only when compiling as one source file. #include <iostream> namespace bj=boost::json; bj::object read_json(std::istream& is){ boost::json::error_code ec; auto jv=bj::parse(is,ec); if(ec){ throw std::runtime_error(ec.message()); } return jv.as_object(); } int main(){ try{ std::istringstream iss("{\"key\":\"value\"}"); auto obj=read_json(iss); std::cout<<"Key:"<<obj.at("key").as_string().c_str()<<'\n'; }catch(const std::exception& e){ std::cerr<<e.what()<<std::endl; } return 0; } ``` 以上展示了三种主流方式之一的具体应用实例,每种都有各自的优势,在实际开发过程中可以根据具体需求选择合适的解决方案[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值