小编Ter*_*ndt的帖子

如何在 cJSON 中测试布尔值的 TRUE/FALSE

我正在使用 cJSON 解析 json 文件。一切进行得都很顺利。但其中一个数据元素是布尔值,问题是我不明白如何使用 cJSON 的函数来读取布尔类型。数据文件包含如下行:

"isDaytime": true,
Run Code Online (Sandbox Code Playgroud)

我尝试使用如下代码块:

if (cJSON_IsTrue("isDaytime")==0) {
    printf("isDaytime = TRUE\n");
} else {
    printf("isDaytime = FALSE\n");
}
Run Code Online (Sandbox Code Playgroud)

当我尝试用 gcc 编译它时,我收到以下消息:

undefined reference to `cJSON_IsTrue'
Run Code Online (Sandbox Code Playgroud)

我想也许 cJSON 将它表示为 int ?我不知道。无论如何,有谁知道我应该如何调用 cJSON_IsTrue() ?或者也许我根本不应该调用 cJSON_IsTrue() 。如果不是,我应该如何检查这种类型的数据元素?如果它是一个 int,我就完成了。如果它是一个 char *,我就完成了。我只是不确定如何测试它是真是假。

编辑: 根据 cJSON 库的文档,此处:https://github.com/DaveGamble/cJSON

由于整个库只有一个 C 文件和一个头文件,因此您只需将 cJSON.h 和 cJSON.c 复制到您的项目源中即可开始使用。

这就是我使用 cJSON 的方式。我刚刚将这两个文件包含在我的项目中,一切都很顺利。直到我尝试使用 cJSON_IsTrue() 函数。我无法从文档或源文件中了解如何正确使用该函数。我想我只是尝试“错误地”使用它,然后通过出现的任何错误消息来纠正自己。

我没想到会收到“未定义的引用”错误消息。我查了一下源码,确实有这个功能......

David Collins 建议我在编译时需要链接到 cjson 库。我包括了来源,所以我认为这不是真正的答案。但好吧。因此,我按照说明进行操作,并在我的系统上实际安装了该库。我收到了相同的未定义参考错误消息。

事实证明,库本身安装的位置:/usr/local/lib 没有被引用。我将安装的文件复制到系统的正确目录中,当我使用 -lcjson 标志进行编译时,cJSON_IsTrue() 函数现在可用。

那么如何使用呢?这就是我的使用方式:

`if ( cJSON_IsTrue(cJSON_GetObjectItem(subitem, "isDayTime")) == 1) {
    /* do …
Run Code Online (Sandbox Code Playgroud)

c cjson

1
推荐指数
1
解决办法
6321
查看次数

标签 统计

c ×1

cjson ×1