這是一條json
一對{}
就是乙個json object,
object裡的"mane"
"age"
被稱為key name,"hany"
18
被稱為key value。
key name是乙個字串;
}
使用c庫函式strstr
判斷有無關心的關鍵字即可。
#include #include const char *rpc_cmd = "";
if (strstr(rpc_cmd, "led_on"))
先寫出這條json的格式,再使用c庫函式snprintf
對其進行value值填充即可
const char *query_did_format = "";
char rpc_buf[64] = ;
snprintf(rpc_buf, sizeof(rpc_buf), query_did_format, rand());
目標static const char *monitor_without_hd = "]\n\
}";/*return 1 if the monitor supports full hd , 0 otherwise*/
static int supports_full_hd(const char * const monitor)
/* 在json object中,查詢 key name 為 「name」的 key, 找到後返回其 key value */
const cjson *name = cjson_getobjectitemcasesensitive(monitor_json, "name");
/* 判斷 key value是不是字串,並且字串不為空 */
if (cjson_isstring(name) && (name->valuestring != null))
/* 在json object中,查詢key name 為"resolution"的key,找到後返回其值 */
const cjson *resolutions = cjson_getobjectitemcasesensitive(monitor_json, "resolutions");
/* 判斷resolution是不是陣列 */
if (!cjson_isarray(resolutions))
const cjson *resolution = null;
/* 在resolutions陣列中,遍歷每乙個json object */
cjson_arrayforeach(resolution, resolutions)
if (width->valueint == 1920 && width->valueint == 1080)
}end:
/*釋放cjson_parse分配出來的記憶體*/
cjson_delete(monitor_json);
return status;
}
目標
格式化的json
,,]
}
未格式化的json
,,]}
**生成格式化的json
//note: returns a heap allocated string, you are required to free it after use.
void create_monitor_with_helpers(void)
, ,
};char *string = null;
cjson *resolutions = null;
size_t index = 0;
/*建立{}。cjson_createobject執行後,會申請一塊記憶體,使用完畢後,需要手動釋放*/
cjson *monitor = cjson_createobject();
/**/
if (cjson_addstringtoobject(monitor, "name", "awesome 4k") == null)
/**/
resolutions = cjson_addarraytoobject(monitor, "resolutions");
if (resolutions == null)
//對陣列進行賦值
for (index = 0; index < (sizeof(resolution_numbers) / (2 * sizeof(int))); ++index)
cjson *resolution = cjson_createobject();
//加入鍵值對width
if (cjson_addnumbertoobject(resolution, "width", resolution_numbers[index][0]) == null)
//加入鍵值對height
if (cjson_addnumbertoobject(resolution, "height", resolution_numbers[index][1]) == null)
//將當前object 加入到陣列
cjson_additemtoarray(resolutions, resolution);
}//對建立好的json進行格式化。cjson_print執行後會提請一塊記憶體,使用完畢後,需要手動釋放
string = cjson_print(monitor);
if (string == null)
else
end:
cjson_delete(monitor);
}
cjson_parse
cjson_createobject
要用cjson_delete
釋放
cjson_print
cjson_printunformatted
要用cjson_free
釋放
使用cjson
解析庫,但是使用後的**冗餘且邏輯性差,故對cjson庫進行二次封裝,實現乙個 struct 與 json 之間快速互轉的庫。
將這下面的結構體
/* 籍貫 */
typedef struct hometown;
/* 學生 */
typedef struct student;
static student orignal_student_obj = ,
.name = "armink",
.hometown.name = "china",
};
json串
}
進行資料相互轉換
/**
* student json object to structure object
* * @param json_obj json object
* * @return structure object
*/static void *json_to_struct(cjson* json_obj)
/** * student structure object to json object
* * @param struct_obj structure object
* * @param json object
*/static cjson *struct_to_json(void* struct_obj)
json建立和解析
1.輸出多個物件功能的json game 2 輸出陣列功能的 json 例子如 1.如 解析陣列型別的 json public static void jiexijson throws jsonexception jsonarray jsonarray new jsonarray sjson int...
簡單解析json資料(接上篇建立json資料)
解析json資料 接上篇 建立json資料 1.先了解json資料格式 值,值,2.建立 jsonobject 與 jsonarray 物件 傳入 資料,例 string msg 若msg是遇到 jsonobject jsonobjcet jsonarray.getjsonobject key 值,...
json 檔案解析與應用
第一步 首先弄乙個 json 檔案 我這裡成為 config.json 內容如下 1001 第二步 新增解析 json 檔案的函式 記得 首先宣告乙個全域性的 map 容器 或者成員的 map 容器map fortext int helloworld parse json for csjson va...