[json] JSON for Modern C++

有幸能接触到这个,这是我遇到的使用最方便的json了,效率没研究过!

简单了使用了下,感觉非常好用,记录下:

要使用这个json,只需要使用json.hpp就行,放入自己的工程里,但是我这里是安装过的,为了其他项目也能使用!

 

环境: Mac OS X 10.12.6, Xcode(Version 8.3.3 (8E3004b))

安装:

brew tap nlohmann/json
brew search nlohmann
brew info nlohmann/json/nlohmann_json
brew install nlohmann/json/nlohmann_json

安装就是第1,4两句, 等待安装完成就行!

 

开发: 新建一个c++控制台程序,添加以下代码:

//
//  main.cpp
//  hello
//
//  Created by zcm on 2019/2/18.
//  Copyright © 2019年 zcm. All rights reserved.
//#include <iostream>
#include <vector>
#include "nlohmann/json.hpp"using namespace std;
using json = nlohmann::json;int main(int argc, const char * argv[]) {json j2 = {{"pi", 3.141},{"happy", true},{"name", "Niels"},{"nothing", nullptr},{"answer", {{"everything", 42}}},{"list", {1, 0, 2}},{"object", {{"currency", "USD"},{"value", 42.99}}}};cout << j2.dump() << endl;// this writing looks goodauto j = R"({"happy": true,"pi": 3.141,"arr": [1, 4, 6]})"_json;cout << j << endl;j = json::parse("{ \"happy\": false, \"pi\": 3.141 }");j["pi"] = 3.666;				// 修改键值j.emplace("pi2", 3.5);			// 如果键不存在, 则添加j["add"] = {{"pi", 4.5}, {"p", 6}};cout << j << endl;for(auto& i : j.items())		// 遍历键值对{cout << i.key() << " : " << i.value() << endl;}if(j.find("pi") != j.end())		// 键存在cout << j["pi"] << endl;cout << j.count("add") << endl;	// count()返回1表示键存在, 否则不存在vector<int> v {1, 5, 7};json j3(v);						// 通过vector初始化jsoncout << j3 << endl;return 0;
}

项目配置,增加:

运行结果:

{"answer":{"everything":42},"happy":true,"list":[1,0,2],"name":"Niels","nothing":null,"object":{"currency":"USD","value":42.99},"pi":3.141}
{"arr":[1,4,6],"happy":true,"pi":3.141}
{"add":{"p":6,"pi":4.5},"happy":false,"pi":3.666,"pi2":3.5}
add : {"p":6,"pi":4.5}
happy : false
pi : 3.666
pi2 : 3.5
3.666
1
[1,5,7]
Program ended with exit code: 0

注意: 必须开启c++11 编译选项

======================================

再补充说明下,上图:

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

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

相关文章

面向对象的需求分析方法

面向对象的需求分析方法 面向对象的需求分析方法的核心是利用面向对象的概念和方法为软件需求建造模型。它包含面向对象风格的图形语言机制和用于指导需求分析的面向对象方法学。 面向对象的思想最初起源于 20世纪 60年代中期的仿真程序设计语言Simula67。20世纪80年代初出现的…

js防篡改对象之冻结对象

const person {name: 啦啦德玛西亚,_job: 无业}Object.defineProperty(person, job, {get: function() {return this._job},set: function(newValue) {this._job newValue}})console.log(Object.isFrozen(person))// false//使用Object.freeze()将对象修改为冻结对象&#xf…

libinject的编译

libinject是一个Android进程注入实例&#xff0c;其下载地址为&#xff1a;http://download.csdn.net/download/ljhzbljhzb/3680780 libinject的编译需要NDK开发环境&#xff0c;在NDK安装成功之后&#xff0c;可以先将其自带的实例中的HelloJni导入到eclipse中&#xff0c;编译…

Boost - 序列化 (Serialization)

From: https://blog.csdn.net/zj510/article/details/8105408 程序开发中&#xff0c;序列化是经常需要用到的。像一些相对高级语言&#xff0c;比如JAVA, C#都已经很好的支持了序列化&#xff0c;那么C呢&#xff1f;当然一个比较好的选择就是用Boost&#xff0c;这个号称C准…

Linux Supervisor 守护进程基本配置

supervisor:C/S架构的进程控制系统&#xff0c;可使用户在类UNIX系统中监控、管理进程。常用于管理与某个用户或项目相关的进程。 组成部分supervisord&#xff1a;服务守护进程supervisorctl&#xff1a;命令行客户端Web Server&#xff1a;提供与supervisorctl功能相当的WEB操…

ES6使用object的is()方法比较两个值

此前js比较两个值是否相等时&#xff0c;一般使用 或 符号&#xff0c;我之前倾向使用后者&#xff0c;因为可以避免比较时触发强制类型转换&#xff0c;但某些情况使用 依然有问题&#xff0c;比如再比较NaN NaN时&#xff0c;返回的是false&#xff0c;需要使用isNaN()才能…

关闭子窗口 父窗口自动刷新

function clsoseForm(){window.opener.location.hrefwindow.opener.location.href; window.opener.location.reload();window.close();}转载于:https://blog.51cto.com/congwa/1199250

使用vue的sync修饰符进行子父组件的数据绑定

官方文档 父组件代码 <template><div><input type"button" value"我是父组件的按钮" click"show" /><!-- 在需要子组件修改的数据后加上.sync即可 --><child :isShow.syncisShow v-show"isShow" />&l…

三阶魔方还原公式

From: https://www.cnblogs.com/zqifa/p/mofang-1.html 1. 第二层棱块归位&#xff1a; 2. 顶层十字 3. 顶层棱中间块归位 这一步的目的是使顶层的4个棱中间块全部归位。 转动顶层(U)&#xff0c;若可以使一个棱中间块归位(如下图左&#xff0c;这里以[红-黄]块为例)&#x…

选项板概述

2019独角兽企业重金招聘Python工程师标准>>> 1、选项板概述 选项面板是一个包括一个或多个选项卡(Tab)&#xff0c;同一时刻只显示一个选项卡的这种用户界面。比如下图的IE选项设置界面中&#xff0c;就是一个选项板的应用&#xff0c;选项板上有“常规”、“安全”…

Vue 跳转相同路由携带不同参数,而页面不刷新

由于组件是复用的&#xff0c;若要对路由参数的变化作出响应的话&#xff0c;就需要在此组件上使用 watch&#xff08;监测变化&#xff09; $route 对象 created() {this.listQuery.code this.$route.query.id;this.getList();},watch: {$route(to, from) {//当参数改变时就会…

三阶魔方的入门教程

From: http://www.rubik.com.cn/beginner.htm 下面是三阶魔方图文教程&#xff0c;想直接看更好懂的三阶魔方视频教程请点这里 魔方别看只有26个小方块&#xff0c;变化可真是不少&#xff0c;魔方总的变化数为 或者约等于4.31019。如果你一秒可以转3下魔方&#xff0c;不计重…

oracle技术之查询初始化参数的方法(六)

查询初始化参数的方法很多&#xff0c;比如SHOW PARAMETER&#xff0c;或查询V$PARAMETER等&#xff0c;这里简单总结一下。这一篇描述CREATE PFILE的方法检查初始化参数。前面介绍了很多种方法&#xff0c;这些方法都是在数据库中查询初始化参数的设置。其实还有一种方法更加的…

MySQL LIST分区(转载)

LIST分区和RANGE分区非常的相似&#xff0c;主要区别在于LIST是枚举值列表的集合&#xff0c;RANGE是连续的区间值的集合。二者在语法方面非常的相似。同样建议LIST分区列是非null列&#xff0c;否则插入null值如果枚举列表里面不存在null值会插入失败&#xff0c;这点和其它的…

vue组件化通信之父向子传值

vue组件化通信之子向父传值 vue组件化通信之兄弟组件传值 父向子组件传值 常用的方法主要有三种&#xff1a;props、$refs、$children 建议使用前两种 使用props进行传值 parent.vue <template><div><childTest :msgmsg></childTest></div> …

Openssl的证书格式转换

PKCS 全称是 Public-Key Cryptography Standards &#xff0c;是由 RSA 实验室与其它安全系统开发商为促进公钥密码发展而制订的一系列标准。PKCS 目前共发布过 15 个标准。常用的有&#xff1a;1. PKCS#7 Cryptographic Message Syntax Standard2. PKCS#10 Certification Requ…

啦啦

Y2错题解析 数据流程图描述信息的来龙去脉和实际流程&#xff0c;反映信息在系统中流动、处理和存储的情况。程序结构图用来描述程序结构&#xff0c;一般由构成系统的要素和表达要素间关系的连线或箭头构成。因果图是一种发现问题“根本原因”的分析方法。 Spring依赖检查的常…

身份证号码格式验证

From: https://www.cnblogs.com/chenhaoyu/p/6189207.html /*** 验证身份证号码真伪* param $id* return bool*/ function checkIDCard( $id ) {$id strtoupper($id);$regx /(^\d{15}$)|(^\d{17}([0-9]|X)$)/;if(!preg_match($regx, $id))return false;$arr_split [];if(15 …

vue组件化通信之子向父传值

vue组件化通信之子向父传值 vue组件化通信之兄弟组件传值 vue中子向父传递消息一般使用$emit&#xff0c;方法比较简单&#xff0c;直接看代码 父组件 <template><div><childTest msgmyMsg></childTest>{{msg}}</div> </template><s…

冒泡排序 C#

主程序入口class Program{static void Main(string[] args){int[] iArrary new int[] { 1, 5, 13, 6, 10, 55, 99, 2, 87, 12, 34, 75, 33, 47 };//定义数组BubbleSorter sh new BubbleSorter();sh.Sort(iArrary);for (int m 0; m < iArrary.Length; m)//输出结果Console…