c++ nlohmann/json

news/2025/2/10 23:58:45/

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 boolj["happy"] = true;// add a string that is stored as std::stringj["name"] = "Niels";// add another null object by passing nullptrj["nothing"] = nullptr;// add an object inside the objectj["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.ppmy.cn/news/346732.html

相关文章

freemarker 生成前端文件

Freemarker是一种模板引擎&#xff0c;它允许我们在Java应用程序中分离视图和业务逻辑。在Freemarker中&#xff0c;List是一种非常有用的数据结构&#xff0c;它允许我们存储一组有序的元素。有时候&#xff0c;我们需要判断一个List是否为空&#xff0c;这在程序设计中有许多…

振弦采集仪在岩土工程安全监测使用的解决方案

振弦采集仪是一种岩土工程安全监测仪器&#xff0c;主要用于监测建筑物、桥梁、隧道、地铁等工程结构的动态响应&#xff0c;以及岩土体的振动情况。其工作原理是通过振弦传感器采集结构或岩土体的振动信号&#xff0c;再通过数据采集系统进行处理和分析&#xff0c;得出结构或…

音乐探索1:电吉他和练习音箱

背景&#xff1a; 很久以前就想着搞一把电吉他来玩一下。不过因为博主是穷学生一个&#xff0c;没有多余的钱去搞设备&#xff0c;也就一直拖着。今年冬天的时候博主用实习的钱买了一把电吉他和一个练习音箱。没有请吉他老师&#xff0c;所以所有关于设备的信息都是利用空余的时…

全球与中国壁挂式扬声器市场发展战略分析及投资规模预测报告2022-2028年

全球与中国壁挂式扬声器市场发展战略分析及投资规模预测报告2022-2028年 详情内容请咨询鸿晟信合研究院&#xff01; 【全新修订】&#xff1a;2022年3月 【撰写单位】&#xff1a;鸿晟信合研究网 2021年全球壁挂式扬声器市场销售额达到了 亿美元&#xff0c;预计2028年将达到…

新手入门吉他推荐,第一把吉他从这十款选绝不踩雷!初学者吉他选购指南【新手必看】#VEAZEN费森#雅马哈#卡马

一、新手购琴注意事项&#xff1a; 1、预算范围 一把合适的吉他对于初学者来说会拥有一个很好的音乐启蒙。选一款性价比高&#xff0c;做工材料、音质和手感相对较好的吉他自然不会是一件吃亏的事。**初学者第一把琴的预算&#xff0c;我觉得最低标准也是要在500元起&#xf…

雅马哈推出可以播放黑胶唱片和流行音乐的无线唱盘

鉴于到在过去几年里黑胶唱片的惊人复兴&#xff0c;一个能够在家里播放黑胶音乐的唱机转盘上市只是时间问题&#xff0c;下图显示的是由雅马哈提供的那个转盘。新的黑胶唱片500具有许多创新&#xff0c;与其他型号相比&#xff0c;这款唱机转盘在市场上脱颖而出。MusicCast黑胶…

YAMAHA Parametric Room Acoustic Optimizer --- 雅马哈室内音场最优化

大家热衷于多声道时&#xff0c;却也被那烦乱的接线搞得头昏脑胀&#xff0c;不管是裸接还是暗埋&#xff0c;在讲究零损耗的发烧友来说&#xff0c;喇叭线、接驳线……越来越粗&#xff0c;在机后密密麻麻的接线前面三个声道马马虎虎对付&#xff0c;另外几个声道喇叭可不是就…

想要安装吸顶音箱?那么这些功课一定要做好!

笨重的传统音箱已经无法满足现代人快节奏追求轻便的心&#xff0c;进而吸顶音箱就成为了目前非常受欢迎的音箱之一啦&#xff5e;想要安装吸顶音箱的小伙伴&#xff0c;下面这些笔记一定不要错过了&#xff01; 1.选择吸顶音箱的注意事项 ①吊顶深度&#xff1a; 吸顶音箱一般…