国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

c++ nlohmann/json 及修改json文件中個別關(guān)鍵字 JSON的三種格式https://blog.csdn.net/daxiong0816/article/details/125132404

這篇具有很好參考價值的文章主要介紹了c++ nlohmann/json 及修改json文件中個別關(guān)鍵字 JSON的三種格式https://blog.csdn.net/daxiong0816/article/details/125132404。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

(2條消息) nlohmann json使用_nlohmann::json_蝸牛單行道的博客-CSDN博客json為JavaScript object notation 是一種數(shù)據(jù)格式,逐漸替換掉了傳統(tǒng)的xml 。json數(shù)據(jù)格式的屬性名稱和字符串值需要用雙引號引起來,用單引號或者不用引號會導致讀取數(shù)據(jù)錯誤。json的另外一個數(shù)據(jù)格式是數(shù)組,和javascript中的數(shù)組字面量相同。

使用Json的格式與解析方便的可以表示一個對象信息,json有兩種格式:

json中不能有注釋,undefined,只要涉及到字符串的就必須雙引號

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

②數(shù)組/集合格式:[obj,obj,obj...]。

json.parse()解析將字符串解析成對應的值,

例子:

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

?中代碼下載下來,然后將include文件夾添加到測試工程的包含路徑下即可:

我是用的絕對路徑:D:\excer\mfc\json\json\include\;?

c++ nlohmann/json 及修改json文件中個別關(guān)鍵字
JSON的三種格式https://blog.csdn.net/daxiong0816/article/details/125132404

?測試代碼:

#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
  }
}

?異常處理:

標簽(關(guān)鍵字)happy2不存在,只有標簽(關(guān)鍵字)happy,如果執(zhí)行該語句bool td = data["happy2"]; 在直接讀取標簽happy2則解析器會崩潰。

解決辦法:下面先對標簽判斷一下是否為空,為空的話,就不要直接讀取了。 標簽不為空才能直接讀取

//td = data["happy"];
	if (!data["happy"].is_null())//關(guān)鍵字不為空才能直接讀取
	{
		td = data["happy"];
	}

或者用contain

if (js.contains("exposure"))
	{
		// expos = js["exposure"];//不建議
		//.get<std::string>()
		expos = js["exposure"].get<int>();//建議顯示類型轉(zhuǎn)換
		strTemp.Format(L"%d", expos);
		SetDlgItemText(IDC1_EDIT1, strTemp);;
	}

?

?異常2:修改json文件中個別關(guān)鍵字時

按照直接修改js["exposure"] = expos;寫到j(luò)son文件時,文件會出現(xiàn)重復的關(guān)鍵字,后面json再讀取解析文件時就會崩潰,解決辦法為: 先讀json文件,然后解析,解析后賦值給中間變量,

修改中間變量中的關(guān)鍵字,然后再保存json文件就可以了。

std::ifstream ifs("config.json", std::ios::app);//先讀json文件
	json ss = json::parse(ifs);//解析json文件
	json js = ss;//中間變量js
	//js = ss;
	CString strTemp;
	GetDlgItemText(IDC1_EDIT1, strTemp);
	int expos = _ttoi(strTemp);
	if (js.contains("exposure"))
	{
		js["exposure"] = expos;//修改中間變量js中關(guān)鍵字exposure
	}
	

	std::ofstream fs("config.json");//最后寫json文件
	fs << std::setw(4)<< js << std::endl;;//setw(4) 是用于打印格式好看的 json 文件//使用 j.dump(4) 也是一樣的效果
	//fs <<  js;
	fs.close();

參考:

Issues · nlohmann/json (github.com)https://github.com/nlohmann/json/issues/1475

主要看下面的文章:

寫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

(2條消息) nlohmann json使用_nlohmann::json_蝸牛單行道的博客-CSDN博客https://blog.csdn.net/qq_39568245/article/details/115312690?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-115312690-blog-121181848.235%5Ev38%5Epc_relevant_anti_vip_base&spm=1001.2101.3001.4242.1&utm_relevant_index=3文章來源地址http://www.zghlxwxcb.cn/news/detail-481055.html

到了這里,關(guān)于c++ nlohmann/json 及修改json文件中個別關(guān)鍵字 JSON的三種格式https://blog.csdn.net/daxiong0816/article/details/125132404的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • C++—static關(guān)鍵字詳解

    C++的static有兩種用法:面向過程程序設(shè)計中的static和面向?qū)ο蟪绦蛟O(shè)計中的static。前者應用于普通變量和函數(shù),不涉及類;后者主要說明static在類中的作用。 靜態(tài)全局變量有以下特點: 1、該變量在全局數(shù)據(jù)區(qū)分配內(nèi)存; 2、未經(jīng)初始化的靜態(tài)全局變量會被程序自動初始化為

    2024年02月15日
    瀏覽(23)
  • 【C++】requires關(guān)鍵字簡介

    requires 是 C++20 中引入的一個新,用于在函數(shù)模板或類模板中聲明所需的一組語義要求,它可以用來限制模板參數(shù),類似于 typename 和 class 。 requires 常與 type_traits 頭文件下類型檢查函數(shù)匹配使用,當 requires 后的表達式值為 true 時滿足 requires 條件,代表由其

    2024年02月04日
    瀏覽(27)
  • C++ 11 新特性 關(guān)鍵字

    我們先來看一段代碼: 在這案例中,我們可以看到,聲明為迭代器的變量前綴非常長,這樣來寫代碼非常不美觀,也不方便。auto的出現(xiàn)很大程度是為了解決該問題。 現(xiàn)在我們來回答剛才的問題: 在C++中, auto 是一個,它的作用是讓編譯器自動推導變量的類型,根據(jù)變

    2024年02月11日
    瀏覽(21)
  • C++系列:const關(guān)鍵字

    在學習C++時,const的知識點分散在書的各個章節(jié)。當我們嘗試在編程時使用const時,總會感覺有一些細節(jié)被遺忘,因而不能得心應手地使用const。因此,本篇文章嘗試著對const的做一些總結(jié)。參考書籍《C++ Primer Plus》 這里是我做的關(guān)于const的一些總結(jié)

    2024年03月09日
    瀏覽(29)
  • 【C++】:函數(shù)重載,引用,內(nèi)聯(lián)函數(shù),auto關(guān)鍵字,基于范圍的for循環(huán),nullptr關(guān)鍵字

    【C++】:函數(shù)重載,引用,內(nèi)聯(lián)函數(shù),auto關(guān)鍵字,基于范圍的for循環(huán),nullptr關(guān)鍵字

    在C語言中,同名函數(shù)是不能出現(xiàn)在同一作用域的,但是在C++中卻可以,但是要滿足函數(shù)重載的規(guī)則。 那什么是函數(shù)重載呢?它的規(guī)則是什么呢? 函數(shù)重載 :是函數(shù)的一種特殊情況,C++允許在 同一作用域 中聲明幾個功能類似的 同名函數(shù) ,這些同名函數(shù)的 形參列表(參數(shù)個數(shù)

    2024年04月26日
    瀏覽(25)
  • 用python實現(xiàn)給出關(guān)鍵字查找并標注pdf文件中關(guān)鍵字

    要在Python中標注PDF文件中的,可以使用Python的PDFMiner庫和Python的matplotlib庫。 首先,需要安裝這兩個庫??梢允褂胮ip命令進行安裝: shell 復制代碼 pip install pdfminer.six matplotlib 接下來,可以使用以下代碼實現(xiàn)查找和標注功能: python 復制代碼 import pdfminer ? from pdf

    2024年01月16日
    瀏覽(89)
  • 【C++】const關(guān)鍵字的詳解??!

    【C++】const關(guān)鍵字的詳解!!

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個人主頁 :阿然成長日記 ??點擊可跳轉(zhuǎn) ?? 個人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進階 ?? 不能則學,不知則問,恥于問人,決無長進 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? const是永恒不

    2024年02月03日
    瀏覽(30)
  • Json Schema介紹 和 .net 下的實踐 - 基于Lateapexearlyspeed.Json.Schema - 基礎(chǔ)1 - type關(guān)鍵字和string類型

    本系列旨在介紹Json Schema的常見用法,以及.net實現(xiàn)庫Lateapexearlyspeed.Json.Schema的使用 這篇文章將介紹Json Schema中的type,和string類型的常見驗證功能。用例基于.net的LateApexEarlySpeed.Json.Schema nuget package。這是新創(chuàng)建的一個 Json Schema在.net下的高性能實現(xiàn)庫。 就像其他各種Sch

    2024年02月02日
    瀏覽(28)
  • C++入門學習(八)sizeof關(guān)鍵字

    C++入門學習(八)sizeof關(guān)鍵字

    sizeof ? 是 C 和 C++ 中的一個運算符,用于確定特定類型或?qū)ο蟮膬?nèi)存大小(以字節(jié)為單位)。 1、查看數(shù)據(jù)類型占據(jù)內(nèi)存大小 2、確定數(shù)組大小 3、確定結(jié)構(gòu)體大小

    2024年01月21日
    瀏覽(17)
  • C++基礎(chǔ)之關(guān)鍵字——virtual詳解

    C++基礎(chǔ)之關(guān)鍵字——virtual詳解

    修飾父類中的普通函數(shù) 被修飾的函數(shù)稱為虛函數(shù), 是C++中多態(tài)的一種實現(xiàn)(多說一句,多態(tài)分編譯時多態(tài)-通過重載實現(xiàn)和運行時多態(tài)-通過虛函數(shù)實現(xiàn))。 也就是說用父類的指針或者引用指向其派生類的對象,當使用指針或引用調(diào)用函數(shù)的時候會根據(jù)具體的對象類型調(diào)用對應對

    2024年02月08日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包