簡體   English   中英

如何在cJSON中測試布爾值是否為TRUE / FALSE

[英]How to test for a Boolean being TRUE/FALSE in cJSON

我正在使用cJSON解析json文件。 一切進行得都很順利。 但是數據元素之一是布爾值,問題是我不明白如何使用cJSON的函數讀取布爾值類型。 數據文件包含以下行:

"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()。 如果沒有,我應該如何檢查這種類型的數據元素? 如果它是一個整數,我一定會做的。 如果它是一個字符*,我就完成了。 我只是不確定我應該如何測試它是對還是錯。

編輯:根據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 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);

編譯/鏈接

你提到過

當我嘗試使用gcc進行編譯時,收到以下消息:
未定義對cJSON_IsTrue引用

編譯時需要鏈接cjson庫。 例如,如果使用gcc編譯器,則應使用類似

gcc -o json-test json-test.c -lcjson

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM