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

 更新时间:2023年06月19日 14:41:54   作者:泡沫o0  
nlohmann::basic_json::accept 是 Nlohmann JSON 库中的一个方法,它用于检查一个字符串是否可以解析为有效的 JSON,这篇文章主要介绍了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。

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

迭代器的 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 汇编语言rep movsd 的使用详解

    汇编语言rep movsd 的使用详解

    rep movsd 每次ecx!=0便执行movsd ,然后ecx=ecx-1 movsd移动ds:[si] 到es:[di],在32位汇编下可以用esi代替si,edi代替di
    2013-09-09
  • C语言图文并茂详解链接过程

    C语言图文并茂详解链接过程

    首先来思考一个问题:工程中的每个C语言源文件被编译后生成的目标文件,这些目标文件如何生成最终的可执行程序? 这就需要这节我们将要分析的链接器
    2022-04-04
  • Opencv下载和导入Visual studio2022的实现步骤

    Opencv下载和导入Visual studio2022的实现步骤

    本文主要介绍了Opencv下载和导入Visual studio2022的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 简单对比C语言中的fputs()函数和fputc()函数

    简单对比C语言中的fputs()函数和fputc()函数

    这篇文章主要介绍了简单对比C语言中的fputs()函数和fputc()函数,注意其之间的区别,需要的朋友可以参考下
    2015-08-08
  • 关于数据结构单向链表的各种操作

    关于数据结构单向链表的各种操作

    这篇文章主要介绍了关于数据结构单向链表的各种操作,关于数据结构链表的操作一般涉及的就是增删改查,下面将关于无空头链表展开介绍,需要的朋友可以参考下
    2023-04-04
  • 详解C++ 中的三种继承方式

    详解C++ 中的三种继承方式

    这篇文章主要介绍了详解C++ 中的三种继承方式,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-03-03
  • C++中BitSet和Bloom_Filter的实现

    C++中BitSet和Bloom_Filter的实现

    本文主要介绍了C++中BitSet和Bloom_Filter的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 为什么说C语言是永不过时的语言

    为什么说C语言是永不过时的语言

    时隔5年,C语言再次领先Java,荣登TIOBE编程语言排行榜第一,那么C语言为何不会过时?你需要掌握多少种语言呢,感兴趣的朋友通过本文一起学习下吧
    2020-11-11
  • C语言实现合并字符串

    C语言实现合并字符串

    今天小编就为大家分享一篇C语言实现合并字符串,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C语言顺序表的基本操作(初始化,插入,删除,查询,扩容,打印,清空等)

    C语言顺序表的基本操作(初始化,插入,删除,查询,扩容,打印,清空等)

    这篇文章主要介绍了C语言顺序表的基本操作(初始化,插入,删除,查询,扩容,打印,清空等),具有很好的参考价值,希望对大家有所帮助。
    2023-02-02

最新评论