C++ JSON库 nlohmann::basic_json::accept的用法

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 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 会被设置为 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。

  1. 从兼容的输入中读取。
  2. 从一对字符迭代器中读取。

迭代器的 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::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, …);

目录
相关文章
|
2月前
|
存储 安全 编译器
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
135 2
|
4月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
110 6
|
4月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
144 10
|
1月前
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
47 11
|
3月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
59 3
【C++】map、set基本用法
|
2月前
|
C++
第十三问:C++中静态变量的用法有哪些?
本文介绍了 C++ 中静态变量和函数的用法及原理。静态变量包括函数内的静态局部变量和类中的静态成员变量,前者在函数调用间保持值,后者属于类而非对象。静态函数不能访问非静态成员,但可以通过类名直接调用。静态链接使变量或函数仅在定义文件内可见,避免命名冲突。
86 0
|
4月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
99 5
|
4月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
95 1
|
4月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
364 0
在Java中处理JSON数据:Jackson与Gson库比较
|
4月前
|
JSON JavaScript 前端开发
JSON.parse()和JSON.stringify()用法
JSON.parse()和JSON.stringify()用法
95 1