[英]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.