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

简介: 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, …);

目录
相关文章
|
5天前
|
存储 C++
C++的I/O流标准库
C++的I/O流标准库
14 2
|
4天前
|
存储 算法 C++
高效利用C++ STL库:标准模板库的使用技巧
本文介绍了C++ STL(标准模板库)的高效使用技巧,包括选择合适的容器类型、使用`emplace_back`而非`push_back`、预分配容器空间和范围for循环遍历容器。此外,还讨论了STL算法的运用,如用算法替代手动循环、使用lambda表达式和进行容器操作。通过这些技巧,开发者可以提升C++代码的性能和可读性。
|
4天前
|
存储 算法 C++
C++标准库深度探索
C++标准库深度探索
|
6天前
|
JSON Linux C语言
全网最权威唯一值得推荐的《C/C++框架和库》
关于C++框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。
20 1
|
13天前
|
Linux Shell 开发工具
C++ 的 ini 配置文件读写/注释库 inicpp 用法 [ header-file-only ]
这是一个C++库,名为inicpp,用于读写带有注释的INI配置文件,仅包含一个hpp头文件,无需编译,支持C++11及以上版本。该库提供简单的接口,使得操作INI文件变得容易。用户可通过`git clone`从GitHub或Gitee获取库,并通过包含`inicpp.hpp`来使用`inicpp::iniReader`类。示例代码展示了读取、写入配置项以及添加注释的功能,还提供了转换为字符串、双精度和整型的函数。项目遵循MIT许可证,示例代码可在Linux环境下编译运行。
47 0
|
13天前
|
机器学习/深度学习 JSON 编译器
C++ 资源大全:标准库、Web框架、人工智能等 | 最全整理
C++ 资源列表,内容包括: 标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等
61 1
|
13天前
|
JSON 前端开发 Java
Json格式数据解析
Json格式数据解析
|
11天前
|
JSON NoSQL MongoDB
实时计算 Flink版产品使用合集之要将收集到的 MongoDB 数据映射成 JSON 对象而非按字段分割,该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
13天前
|
存储 JSON 数据处理
从JSON数据到Pandas DataFrame:如何解析出所需字段
从JSON数据到Pandas DataFrame:如何解析出所需字段
29 1
|
2天前
|
SQL 存储 JSON
Hive 解析 JSON 字符串数据的实现方式
Hive 提供 `get_json_object` 函数解析 JSON 字符串,如 `{&quot;database&quot;:&quot;maxwell&quot;}`。`path` 参数使用 `$`、`.`、`[]` 和 `*` 来提取数据。示例中展示了如何解析复杂 JSON 并存储到表中。此外,Hive 3.0.0及以上版本内置 `JsonSerDe` 支持直接处理 JSON 文件,无需手动解析。创建表时指定 `JsonSerDe` 序列化器,并在 HDFS 上存放 JSON 文件,可以直接查询字段内容,方便快捷。