c++ nlohmann/json

news2024/9/25 1:15:26

json为JavaScript object notation 是一种数据格式,逐渐替换掉了传统的xml 。json数据格式的属性名称和字符串值需要用双引号引起来,用单引号或者不用引号会导致读取数据错误。json的另外一个数据格式是数组,和javascript中的数组字面量相同。

使用Json的格式与解析方便的可以表示一个对象信息,json有两种格式:

json中不能有注释,undefined,只要涉及到字符串的就必须双引号

①对象格式:{"key1":obj,"key2":obj,"key3":obj...}、

②数组/集合格式:[obj,obj,obj...]。

json.parse()解析将字符串解析成对应的值,

例子:

将nlohmann/json: JSON for Modern C++ (github.com)

 中代码下载下来,然后将include文件夹添加到测试工程的包含路径下即可:

我是用的绝对路径:D:\excer\mfc\json\json\include\; 

 测试代码:

#include <iostream>
#include <fstream>
#include <ostream>
#include "json.hpp"
using json = nlohmann::json;

int main()
{
    std::cout << "Hello World!\n";

	//读取json文件--------------------------------
	std::ifstream f("example.json");
	json data = json::parse(f);
	double pi = data["pi"];
	bool td = false; 
	//td = data["happy"];
	if (!data["happy"].is_null())
	{
		td = data["happy"];
	}
	std::string sname = data["name"].get<std::string>(); ;
	std::cout << data;
	int c = 0;

	//输出json文件--------------------------------
	// create an empty structure (null)
	json j;

    //方式一---------------------------------------
	// add a number that is stored as double (note the implicit conversion of j to an object)
	j["pi"] = 3.141;

	// add a Boolean that is stored as bool
	j["happy"] = true;

	// add a string that is stored as std::string
	j["name"] = "Niels";

	// add another null object by passing nullptr
	j["nothing"] = nullptr;

	// add an object inside the object
	j["answer"]["everything"] = 42;

	// add an array that is stored as std::vector (using an initializer list)
	j["list"] = { 1, 0, 2 };

	// add another object (using an initializer list of pairs)
	j["object"] = { {"currency", "USD"}, {"value", 42.99} };

    //方式二---------------------------------------
	// instead, you could also write (which looks very similar to the JSON above)
	json j2 = {
	  {"pi", 3.141},
	  {"happy", true},
	  {"name", "Niels"},
	  {"nothing", nullptr},
	  {"answer", {
		{"everything", 42}
	  }},
	  {"list", {1, 0, 2}},
	  {"object", {
		{"currency", "USD"},
		{"value", 42.99}
	  }}
	};

	//输出到文件中
	std::ofstream fout("out.json");
	fout << std::setw(4)<< j;
	fout << std::setw(4) << j2;
	fout.close();

}

对应的:json格式

{
  "pi": 3.141,
  "happy": true,
  "name": "Niels",
  "nothing": null,
  "answer": {
    "everything": 42
  },
  "list": [1, 0, 2],
  "object": {
    "currency": "USD",
    "value": 42.99
  }
}

 异常处理:

标签(关键字)happy2不存在,只有标签(关键字)happy,如果执行该语句bool td = data["happy2"]; 在直接读取标签happy2则解析器会崩溃。

解决办法:下面先对标签判断一下是否为空,为空的话,就不要直接读取了。 标签不为空才能直接读取

//td = data["happy"];
	if (!data["happy"].is_null())//关键字不为空才能直接读取
	{
		td = data["happy"];
	}

主要看下面的文章:

写json格式

c++中nlohmann json的基本使用教程_C 语言_脚本之家 (jb51.net)

nlohmann/json: JSON for Modern C++ (github.com)https://github.com/nlohmann/json/tree/develop

JSON的三种格式https://blog.csdn.net/daxiong0816/article/details/125132404

json格式 (keoaeic.org)https://mip.keoaeic.org/unscramble_major/4394.htmlC++ json格式的书写_雪星途的博客-CSDN博客https://blog.csdn.net/weixin_45387966/article/details/122469835

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金融计量学第1节课:股指收益率序列统计特征

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 导论与介绍 大家好&#xff0c;我是Le Chiffre 今天我们来为大家分享金融计量学系列内容&#xff0c;在松鼠量化3年多分享的内容中&#xff0c;大部分以量化策略为主&#xff0c;至今为止&#xff0c;…

EasyExcel导入导出

在项目开发中往往需要使用到数据的导入和导出&#xff0c;导入就是从Excel中导入到DB中&#xff0c;而导出就是从DB中查询数据然后使用POI写到Excel上。所以今天就为大家带来一款基于阿里EasyExcel的导入导出功能&#xff0c;开放了一个demo&#xff0c;以下是gitee地址&#x…

2.4 逻辑代数的基本定理

学习目标&#xff1a; 如果我要学习逻辑代数的基本定理&#xff0c;我会采取以下步骤&#xff1a; 1. 学习基本概念&#xff1a;首先&#xff0c;我会花时间了解逻辑代数的基本概念&#xff0c;如逻辑运算符&#xff08;合取、析取、否定等&#xff09;、真值表、逻辑等价性等…

Splashtop 与 Pax8 合作为 MSP 提供简化的远程支持解决方案

2023年4月27日 科罗拉多州丹佛 Pax8 是一个行业领先的云商务市场&#xff0c;该公司今天宣布将通过 Pax8 市场在全球推出其全新运营供应商 Splashtop。Splashtop 的远程访问、支持以及端点监控和管理解决方案极具成本效益&#xff0c;而且功能强大&#xff0c;可以助力托管服务…

Java使用JDBC连接PostgreSQL——使用maven,简单配置

目录 前置准备代码 前置准备 因为连接PostgreSQL需要先安装PG&#xff0c;所以以下给出PG的简单安装教程&#xff1a; window安装PostgreSQL 对应的建表语句&#xff1a; DROP TABLE IF EXISTS student; CREATE TABLE student (id serial NOT NULL,name varchar(100) NOT NU…

2023「光亚展」观察:规模空前,智能化趋势已势不可挡

6月12日&#xff0c;第二十八届广州国际照明展览会&#xff08;GILE&#xff09;及第二十届广州国际建筑电气技术展览会&#xff08;GEBT&#xff09;落下帷幕&#xff0c;共计汇聚了来自18个国家及地区的3,318家参展商&#xff0c;总展览面积达到了220,000平方米。 「智哪儿」…

ROS学习中遇到的问题以及解决方案

目录 问题1. 在使用xarco建立urdf时&#xff0c;运行joint_state_publisher/joint_state_publisher_gui报错问题2. 使用amcl定位时报No laser scan received警告&#xff0c; /scan 话题有数据&#xff0c;amcl也订阅了该话题。问题3. 运行.py文件报错问题4. 在roalaunch一个la…

Springboot整合Elasticsearch(一):Linux下安装 Elasticsearch 8.x

1、下载安装包&#xff0c;官方下载地址&#xff1a; Past Releases of Elastic Stack Software | Elastic elasticsearch-8.8.1-linux-x86_64.tar.gz 2、拷贝到 Linux 服务器上&#xff0c; 执行解压缩命令 安装包路径&#xff1a;/home/ELK_8.8.1 [rootlocalhost ELK_8.8.1]…

使用VNISEdit为PyQGIS程序制作一个安装包

引言 通常一个需要发布的程序都需要使用安装包进行安装&#xff0c;不可能给客户发送一套程序和依赖性文件&#xff0c;这样如果需要桌面添加软件的快捷方式&#xff0c;就得让客户自己添加&#xff08;因为每台电脑、每个用户的桌面路径是不一样的&#xff09;&#xff0c;非常…

改善客户体验是客户管理系统的重要价值

在如今竞争激烈的商业环境中&#xff0c;企业需要更好地了解客户需求、偏好和行为&#xff0c;以便提供更好的服务并保持客户忠诚度。这就是为什么越来越多的企业开始使用客户管理系统&#xff08;CMS&#xff09;来改善客户体验。 客户管理系统是一种专门设计用于帮助企业跟踪…

Day05 03-MySQL主从-主主原理与搭建详解

文章目录 第十六章 MySQL的系统架构&#xff08;主从架构&#xff09;16.1 MySQL集群架构的介绍16.1.1 主从架构介绍16.1.2 主从复制的原理 16.2 MySQL主从复制的实现16.2.1 环境说明16.2.2 主库配置16.2.3 从库配置16.2.4 主从复制测试 16.3 MySQL主主复制的实现16.3.1 主主复…

移植好U8g2图形库的STM32F407标准库工程模板,0.96寸OLED驱动程序

移植好U8g2图形库的STM32F407标准库工程模板&#xff0c;用的0.96寸OLED屏&#xff08;SSD1306&#xff09;&#xff0c;用硬件IIC驱动。 花了一晚上时间去移植。开发板主控MCU用的是STM32F407VET6&#xff0c;I2C接口用I2C1&#xff0c;SCL接PB6&#xff0c;SDA接PB7。 嵌入…

从分布式到微服务解密“架构”原理与实战笔记

分布式架构与微服务平台是当今IT界的关键技术&#xff0c;也是资深软件工程师和系统架构师必须掌握的核心技术。 微服务、云原生、Kubernetes、Service Mesh是分布式领域的热点技术&#xff0c;它们并不是凭空出现的&#xff0c;一定继承了某些“前辈”的优点。我们不仅要了解…

网络安全零基础之从原理看懂的XSS

01、XSS 的原理和分类 跨站脚本攻击 XSS(Cross Site Scripting)&#xff0c;为了不和层叠样式表(Cascading Style Sheets&#xff0c;CSS)的缩写混淆 故将跨站脚本攻击缩写为 XSS&#xff0c;恶意攻击者往 Web 页面里插入恶意 Script 代码&#xff0c;当用户浏览该页面时&…

软件测试将会赢来陌路?

最近参加了某大厂总监做的一场测试培训&#xff0c;感触颇深&#xff0c;一句话萦绕在耳畔“测试乃至测开&#xff0c;大厂为了降本增效这些都要被优化掉”。去年由他操刀优化了一大批优秀的测试员&#xff01; 实际小酋这几年已经有切身体会&#xff0c;测试野蛮增长的阶段已经…

cv学习--图像分类完结

深度学习面试题05&#xff1a;激活函数sigmod、tanh、ReLU、LeakyRelu、Relu6 - 黎明程序员 - 博客园 (cnblogs.com)

解惑:测试圈网红工具 Jmeter 到底难在哪里

同样的起点&#xff0c;同样的工作时间&#xff0c;为什么别人接那么多项目&#xff0c;你还是在点点点&#xff1b;为什么别人升职了&#xff0c;而你还在原地踏步&#xff1f; 同样的工作内容&#xff0c;为什么别人下班了&#xff0c;你还在加班&#xff1f; 在现在竞争激烈…

Unity入门4——重要组件与API

一、GameObject &#xff08;一&#xff09;成员变量 // 名字 print(this.gameObject.name); this.gameObject.name "Lesson4唐老狮改名"; print(this.gameOb…

手机号码应该如何选择呢?一文解决你的选择困难症!

哈喽大家好&#xff0c;我是搜卡之家葫芦弟。最近有一些小伙伴们私信葫芦弟&#xff0c;想办一个本地的手机号&#xff0c;想着长久一直使用的。既然是长久使用&#xff0c;那就想选一个不错的号码&#xff0c;手机靓号的话&#xff0c;好一点的号码价格又太贵。这不是要在平凡…

参与PK赢大奖!阿里云机器学习平台PAI助力开发者激发AIGC潜能

近年来&#xff0c;随着海量多模态数据在互联网的爆炸性增长和训练深度学习大模型的算力大幅提升&#xff0c;AI生成内容&#xff08;AI Generated Content&#xff0c;AIGC&#xff09;的应用呈现出爆发性增长趋势。为助力开发者能够一站式快速搭建文生图、对话等热门场景应用…