JSON解析與建立

2022-09-09 06:00:12 字數 4144 閱讀 1509

這是一條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_parsecjson_createobject要用cjson_delete釋放

cjson_printcjson_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...