C++?JSON庫?nlohmann::basic_json::accept的用法解析
簡介
nlohmann::basic_json::accept 是 Nlohmann JSON 庫中的一個方法,它用于檢查一個字符串是否可以解析為有效的 JSON。
方法的簽名如下:
bool accept(const string_t& input);
其中 input 是要檢查的字符串。
如果字符串可以解析為有效的 JSON,那么此方法會返回 true,否則返回 false。
以下是一個使用示例:
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() {
std::string jsonString = R"({"key": "value"})";
std::string notJsonString = R"(Not a json string)";
bool jsonStringIsValid = json::accept(jsonString);
bool notJsonStringIsValid = json::accept(notJsonString);
std::cout << "jsonStringIsValid: " << jsonStringIsValid << '\n';
std::cout << "notJsonStringIsValid: " << notJsonStringIsValid << '\n';
return 0;
}在這個示例中,jsonStringIsValid 會被設(shè)置為 true,因為 jsonString 是一個有效的 JSON 字符串,而 notJsonStringIsValid 會被設(shè)置為 false,因為 notJsonString 不是一個有效的 JSON 字符串。
nlohmann::basic_json::accept 官網(wǎng)介紹
// (1) template<typename InputType> static bool accept(InputType&& i, const bool ignore_comments = false); // (2) template<typename IteratorType> static bool accept(IteratorType first, IteratorType last, const bool ignore_comments = false);
檢查輸入是否為有效的 JSON。
- 從兼容的輸入中讀取。
- 從一對字符迭代器中讀取。
迭代器的 value_type 必須是大小為 1、2 或 4 字節(jié)的整型,分別被解釋為 UTF-8、UTF-16 和 UTF-32。
與 parse 函數(shù)不同,此函數(shù)在遇到無效的 JSON 輸入(即,解析錯誤)時既不拋出異常,也不創(chuàng)建診斷信息。
模板參數(shù)
InputType
兼容的輸入,例如:
- 一個 std::istream 對象
- 一個 FILE 指針(不能為 null)
- 一個 C 風(fēng)格的字符數(shù)組
- 一個指向單字節(jié)字符的空終止字符串的指針
- 一個 std::string
- 一個對象 obj,對于該對象,begin(obj) 和 end(obj) 產(chǎn)生一對有效的迭代器。
IteratorType
兼容的迭代器類型,例如:
- 一對 std::string::iterator 或 std::vector<uint8_t>::iterator
- 一對指針,如 ptr 和 ptr + len
參數(shù)
- i (in): 要解析的輸入。
- ignore_comments (in): 是否應(yīng)忽略注釋并將其視為空格(true)或產(chǎn)生解析錯誤(false);(可選,默認(rèn)為 false)
- first (in): 字符范圍的開始迭代器
- last (in): 字符范圍的結(jié)束迭代器
返回值
輸入是否為有效的 JSON。
異常安全性
強保證:如果拋出異常,JSON 值不會有任何改變。
復(fù)雜性
輸入長度線性。解析器是一個預(yù)測性的 LL(1) 解析器。
注釋
(1) UTF-8 字節(jié)順序標(biāo)記會被靜默忽略。
運行時斷言:通過運行時斷言來執(zhí)行傳遞的 FILE 指針不能為 null 的前提條件。
示例
#include <iostream>
#include <iomanip>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main()
{
// a valid JSON text
auto valid_text = R"(
{
"numbers": [1, 2, 3]
}
)";
// an invalid JSON text
auto invalid_text = R"(
{
"strings": ["extra", "comma", ]
}
)";
std::cout << std::boolalpha
<< json::accept(valid_text) << ' '
<< json::accept(invalid_text) << '\n';
}另請參閱
- parse - 從兼容的輸入反序列化
- operator>> - 從流反序列化
版本歷史
- 在版本 3.0.0 中添加。
- 通過 ignore_comments 忽略注釋在版本 3.9.0 中添加。
棄用
重載 (2) 替換了將一對迭代器作為其第一個參數(shù)的 accept 調(diào)用,該調(diào)用在版本 3.8.0 中已被棄用。這個重載將在版本 4.0.0 中被移除。請將所有像 accept({ptr, ptr+len}, …); 的調(diào)用替換為accept(ptr, ptr+len, …);
到此這篇關(guān)于C++ JSON庫 nlohmann::basic_json::accept的用法的文章就介紹到這了,更多相關(guān)C++ nlohmann::basic_json::accept內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)告警短信轉(zhuǎn)發(fā)
系統(tǒng)在運行過程中,會實時采集設(shè)備的數(shù)據(jù),當(dāng)采集到的數(shù)據(jù)發(fā)生報警后,可以將報警信息以短信的形式發(fā)送給指定的管理員。本文將利用Qt實現(xiàn)告警短信轉(zhuǎn)發(fā),感興趣的可以嘗試一下2022-07-07
C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作的相關(guān)資料,需要的朋友可以參考下2017-06-06
C++ xxx_cast實現(xiàn)轉(zhuǎn)換代碼實例解析
這篇文章主要介紹了C++xxx_cast轉(zhuǎn)換代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07

