- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在用 cJSON 解析一个 json 文件。一切进行得都很顺利。但是其中一个数据元素是 bool 值,问题是我不明白如何使用 cJSON 的函数来读取 bool 类型。数据文件包含如下行:
"isDaytime": true,
我尝试使用如下代码块:
if (cJSON_IsTrue("isDaytime")==0) {
printf("isDaytime = TRUE\n");
} else {
printf("isDaytime = FALSE\n");
}
当我尝试使用 gcc 编译它时,我收到以下消息:
undefined reference to `cJSON_IsTrue'
我想也许 cJSON 将它表示为一个 int?我不知道。无论如何,有谁知道我应该如何调用 cJSON_IsTrue() ?或者我根本不应该调用 cJSON_IsTrue() 。如果不是,我应该如何检查这种类型的数据元素?如果它是一个整数,我就完成了。如果它是一个 char *,我就完成了。我只是不确定我应该如何测试它是真还是假。
编辑:根据 cJSON 库的文档,此处:https://github.com/DaveGamble/cJSON
Because the entire library is only one C file and one header file, you can just copy cJSON.h and cJSON.c to your projects source and start using it.
这就是我使用 cJSON 的方式。我刚刚将这两个文件包含在我的项目中,一切都运行良好。直到我尝试使用 cJSON_IsTrue() 函数。我无法从文档或源文件中看到如何正确使用该功能。我想我只是尝试“错误地”使用它,然后通过出现的任何错误消息来纠正自己。
没想到会收到“undefined reference”的错误信息。翻了一下源码,确实有这个功能……
David Collins 建议我在编译时需要链接到 cjson 库。我包括了来源,所以我认为这不是真正的答案。不过没关系。所以我按照说明实际在我的系统上安装了库。我得到了相同的 undefined reference 错误消息。
事实证明,库本身安装的位置:/usr/local/lib,没有被引用。我将安装的文件复制到我的系统的正确目录中,当我使用 -lcjson 标志编译时,cJSON_IsTrue() 函数现在可用。
那么如何使用呢?我是这样使用它的:
`if ( cJSON_IsTrue(cJSON_GetObjectItem(subitem, "isDayTime")) == 1) {
/* do something if it's true */
} else {
/* do something if it's false */
}`
这似乎已经成功了。再次感谢@David Collins!
最佳答案
cJSON_IsTrue()
不期望字符串文字;它需要一个 cJSON 对象。
假设 json_string
是您的完整 JSON 对象的char *
表示。那么您可以尝试以下操作。
首先解析顶级 JSON 对象。
cJSON *json = CJSON_Parse(json_string);
if (json == NULL) {
// Handle error and abort if appropriate
}
然后提取您的子对象。
cJSON *daytime_json = cJSON_GetObjectItemCaseSensitive(json, "isDayTime");
if (cJSON_IsTrue(daytime_json) == 0) {
// Whatever you need to do next ...
}
// Etc.
最后,不要忘记取消分配内存/事后清理。
cJSON_Delete(json);
你提到过
When I try to compile this with gcc, I get the following message:
undefined reference tocJSON_IsTrue
编译时需要链接cjson
库。例如,如果使用 gcc
编译器,您将使用类似的东西
gcc -o json-test json-test.c -lcjson
关于c - 如何在 cJSON 中测试 bool 值是否为 TRUE/FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50979077/
我正在尝试使用 CJSON 在 Lua 中编码/解码 JSON。我使用 Luarocks ( http://www.kyne.com.au/~mark/software/lua-cjson-manua
我在 Lua 脚本中定义了一个函数,并从我的 C++ 程序中调用它。 Lua 脚本使用 cjson 模块。我可以通过Lua bin执行Lua脚本,但是在我的C++程序中却无法运行。错误信息: erro
当我阅读 cJSON 代码,并且在理解代码时遇到问题: static void *(*cJSON_malloc)(size_t sz) = malloc; static void (*cJSON_fr
当我阅读 cJSON 的代码时,对代码的理解有问题: static void *(*cJSON_malloc)(size_t sz) = malloc; static void (*cJSON_fre
cJson 学习笔记 1、前言 思考这么一个问题:对于不同的设备如何进行数据交换?可以考虑使用轻量级别的 JSON 格式. 那么需要我们手写一个 JSON 解析器吗?这大可不必,因为已
我为我的 js 小部件使用 jQuery 小部件工厂(jQuery 小部件)。 $.widget('cool.someWidget', { options: { onSom
我正在使用 cjson 解码以下 JSON。我想测试 items 参数为 null 的情况。我很难找到匹配这种情况的条件。这很奇怪,因为它看起来不是一个字符串,也不是 nil,但仍然有一个真值。 {
当使用 cJSON 解析字符串文字时,我在释放 cJSON 结构时遇到段错误。 原代码如下: char* jsonStr = "{ \"command\" : { \"param1\": \"valu
我正在做一个 rest api,我在 c++ 中使用 cJSON c 库。 这是我的正文请求示例 { "userEmail": "email@email.com", "userPassword
我正在使用 cJSON但不知何故我无法让字符串工作: void myfile() { cJSON* type = NULL; char text1[]="{\n\"name\": \"Jack
我在为 json 编译不同的库时遇到了太多问题,最后我得到了一个已经编译好的 json 库,它是 cJSON 可以与我的项目链接,但是当我下载它时,并将它与一个测试 c 文件链接,例如: //file
我正在使用 cJSON 来解析包含键值的字符串。我想动态生成我的结构,为此我需要读取该字符串中的所有键。 例如我有一个如下所示的 json,我想在运行时读取所有键。我不知道 json 中会出现哪些所有
tl;dr:我该如何配置cJSON在子进程中分配内存,以便父进程可以看到结果结构? 我收到一个请求,其中列出了要为其生成摘要并以 JSON 形式返回的多个产品。目前,我的代码是单线程的,并使用 cJS
我正在使用 protobuf-c 库和 cJSON,并且我有带有字段的 protobuf 消息 字节参数= 1;//命令特定的负载 我正在将 cJSON 解析为 protobuf,如下所示: args
如何迭代嵌套的 cJSON 对象?我想从 C 中的 deviceData 父对象获取(打印)所有键和值。它是一个 cJson 对象。 obj = { "command": "REP
我在尝试解码特定的 unicode 字符时从 lua cjson 收到以下错误, root@9dc8433e6d83:~/torch-rnn# th train.lua -input_h5 data/
首先,这是一个非常广泛的问题,当我要求社区为我编写代码时,可能会遇到这个问题。这不是我的本意,但我很迷茫,我不知道如何提供足够的信息。 我正在尝试使用由 Dave Gamble 编写的 cJSON 库
我正在尝试使用由 Dave Gamble 编写的 cJSON 库来读取以下 JSON 数组: "items": [ { "name": "command", "
我正在尝试创建如下所示的 JSON 对象,但我无法在其中添加第二个项目,例如: "CarType": "mercedes", "carID": "merc123" 还有其他项目。 我想像这样创建 JS
我正在使用 Yii 为网站构建 API。我知道有一个名为 CJson 的实用程序类,并有一个名为 encode 的函数。 据我所知,可以在原生 json_encode 函数中自定义其他参数,例如 JS
我是一名优秀的程序员,十分优秀!