• c语言用json解析库(jansson)检测字符串是否是json格式的数据


    C语言检测字符串是否是json格式的数据,可以用jansson库检测,也可以用cjson库来校验。但是若数据格式有问题,jansson可以指出哪里有错误,cjson无法指出。

    下面就演示C语言如何使用jansson库检测字符串是否是json格式的数据。

    1.下载jansson库源码(zip 文件)

    GitHub - akheron/jansson: C library for encoding, decoding and manipulating JSON data

    2.编译jansson

    2.1.windows 下编译所需环境

    a. cmake(可参考文章【windows下cmake的小白级入门使用教程(hello world)】(windows下cmake的小白级入门使用教程(hello world)_cmake windows_西晋的no1的博客-CSDN博客

    b. vistual studio(如下图是vs2022必须的组件,cmake支持哪个版本的vs,可参照文章【查看当前cmake版本支持哪些版本的Visual Studio】( 查看当前cmake版本支持哪些版本的Visual Studio-CSDN博客 )进行确定)

    2.2.编译过程

    a.如果是下载的 zip 文件,先解压代码,进入代码文件夹 jansson-master,在当前文件夹的地址栏中输入cmd,然后回车,调出命令行窗口。

    b.在命令行窗口中依次输入下述3行内容:

    md build

    cd build

    cmake -G "Visual Studio 17" ..

    注:需要根据电脑上安装的cmake和vs版本进行填写,如有些低版本的cmake不支持Visual Studio 2022(升级cmake版本),有的电脑上没有安装Visual Studio 2022(安装Visual Studio 2022,或者选择电脑上有的版本)

    vs版本对应

    Visual Studio 17 2022       

    = Generates Visual Studio 2022 project files.

        Use -A option to specify architecture.

    Visual Studio 16 2019       

    = Generates Visual Studio 2019 project files.

       Use -A option to specify architecture.

    Visual Studio 15 2017 [arch]

    = Generates Visual Studio 2017 project files.

       Optional [arch] can be "Win64" or "ARM".

    Visual Studio 14 2015 [arch]

    = Generates Visual Studio 2015 project files.

       Optional [arch] can be "Win64" or "ARM".

    Visual Studio 12 2013 [arch]

    = Generates Visual Studio 2013 project files.

       Optional [arch] can be "Win64" or "ARM".

    Visual Studio 11 2012 [arch]

    = Generates Visual Studio 2012 project files.

       Optional [arch] can be "Win64" or "ARM".

    Visual Studio 10 2010 [arch]

    = Deprecated.  Generates Visual Studio 2010  project files.

       Optional [arch] can be   "Win64" or "IA64".

    Visual Studio 9 2008 [arch] 

    = Generates Visual Studio 2008 project files.

       Optional [arch] can be "Win64" or "IA64".

    编译成功之后,在build文件夹下会生成所有的测试工程。主要内容如下

    build

     + private_include

     + include

     + jansson.sln

    c.用Visual Studio打开build文件夹下的jansson.sln

    d.根据实际使用场景选择合适的版本(Debug或Release),然后选择生成->重新生成解决方案,等待一段时间,可以看到0失败

    e.此时可以在build文件夹下看到lib文件夹下有个Debug或Release文件夹,里面有编译后生成的文件静态库jansson_d.lib

    3.使用示例

    3.1 新建C语言工程

    具体操作过程可以参考文件【VS2022 和 VS2010 C语言控制台输出 Hello World】(https://blog.csdn.net/xijinno1/article/details/127826231)

    3.2 demo.cpp文件的同文件夹下新建一个文件夹,命名为【jansson

    3.3 build文件夹下的3个文件(jansson.hjansson_config.hjansson_d.lib)粘贴到jansson文件夹下

    注意:后续3步的操作,一定要在与编译jansson的配置一样,否则程序将不可使用jansson_d.lib

    3.4 demo工程属性中添加包含目录

    $(LocalDebuggerWorkingDirectory)jansson

    3.5 demo工程属性中添加附加库目录

    $(LocalDebuggerWorkingDirectory)jansson

    3.6 demo工程属性中添加附加依赖项

    jansson_d.lib

    3.7 将下述示例代码覆盖demo.cpp中的所有内容

    1. #include "jansson.h"
    2. int main() {
    3. const char* text = "{ \"name\":\"man\", \"age\":30}";
    4. json_error_t error;
    5. // json_t用于引用任何JSON节点
    6. json_t* root = json_loads(text, 0, &error);
    7. // 如果读取失败,自动置为空指针
    8. if (!root) {
    9. // 输出具体的失败信息
    10. printf("error: on line %d: %s\n", error.line, error.text);
    11. return 1;
    12. }
    13. else {
    14. json_decref(root); // 释放JSON对象。
    15. }
    16. return 0;
    17. }

    3.8 运行测试程序

    程序正常运行,无任何输出。

    若将

    const char* text = "{ \"name\":\"man\", \"age\":30}";

    替换成

    const char* text = "{ \"name\":\"man\, \"age\":30}";

    运行程序,将有如下输出:

    运行程序过程中可能出现类似下面的*.dll文件找不到的报错,只需要将编译生成的jansson_d.dll放于测试程序生成的exe所在的文件夹下即可。

  • 相关阅读:
    简单回归之电表预测
    力扣 -- 718. 最长重复子数组
    Python 自动化教程(1) 概述,第一篇 Excel自动化首篇
    企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势
    【mmsegmentation】
    Redis底层数据结构介绍
    SpringCloud系列(一)Eureka 注册中心
    Qt超时自动关闭子窗口
    【无标题】
    零基础学 Java 编程需要注意哪些事项?
  • 原文地址:https://blog.csdn.net/xijinno1/article/details/133979638