C++ JSON库 nlohmann::basic_json::accept的用法解析
作者:泡沫o0
简介
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
会被设置为 true
,因为 jsonString
是一个有效的 JSON 字符串,而 notJsonStringIsValid
会被设置为 false
,因为 notJsonString
不是一个有效的 JSON 字符串。
nlohmann::basic_json::accept 官网介绍
// (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 字节的整型,分别被解释为 UTF-8、UTF-16 和 UTF-32。
与 parse 函数不同,此函数在遇到无效的 JSON 输入(即,解析错误)时既不抛出异常,也不创建诊断信息。
模板参数
InputType
兼容的输入,例如:
- 一个 std::istream 对象
- 一个 FILE 指针(不能为 null)
- 一个 C 风格的字符数组
- 一个指向单字节字符的空终止字符串的指针
- 一个 std::string
- 一个对象 obj,对于该对象,begin(obj) 和 end(obj) 产生一对有效的迭代器。
IteratorType
兼容的迭代器类型,例如:
- 一对 std::string::iterator 或 std::vector<uint8_t>::iterator
- 一对指针,如 ptr 和 ptr + len
参数
- i (in): 要解析的输入。
- ignore_comments (in): 是否应忽略注释并将其视为空格(true)或产生解析错误(false);(可选,默认为 false)
- first (in): 字符范围的开始迭代器
- last (in): 字符范围的结束迭代器
返回值
输入是否为有效的 JSON。
异常安全性
强保证:如果抛出异常,JSON 值不会有任何改变。
复杂性
输入长度线性。解析器是一个预测性的 LL(1) 解析器。
注释
(1) UTF-8 字节顺序标记会被静默忽略。
运行时断言:通过运行时断言来执行传递的 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) 替换了将一对迭代器作为其第一个参数的 accept 调用,该调用在版本 3.8.0 中已被弃用。这个重载将在版本 4.0.0 中被移除。请将所有像 accept({ptr, ptr+len}, …); 的调用替换为accept(ptr, ptr+len, …);
到此这篇关于C++ JSON库 nlohmann::basic_json::accept的用法的文章就介绍到这了,更多相关C++ nlohmann::basic_json::accept内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!