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.h、jansson_config.h、jansson_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中的所有内容
#include "jansson.h"
int main() {
const char* text = "{ \"name\":\"man\", \"age\":30}";
json_error_t error;
// json_t用于引用任何JSON节点
json_t* root = json_loads(text, 0, &error);
// 如果读取失败,自动置为空指针
if (!root) {
// 输出具体的失败信息
printf("error: on line %d: %s\n", error.line, error.text);
return 1;
}
else {
json_decref(root); // 释放JSON对象。
}
return 0;
}
3.8 运行测试程序
程序正常运行,无任何输出。
若将
const char* text = "{ \"name\":\"man\", \"age\":30}";
替换成
const char* text = "{ \"name\":\"man\, \"age\":30}";
运行程序,将有如下输出: