json可以使用普遍用的比較多的cison
也可以使用別人寫的比較好用的一些現成的,比如慶科MICO的json處理
一、cjson
下載鏈接 https://github.com/DaveGamble/cJSON
下載完成將其中的cJson.c cJson.h復制到自己的項目中引用即可;
1.字符串轉json格式
cJSON *json = cJSON_Parse(str)
a.字符串指針類型
b.返回的cJSON指針類型
2.在指定的cJSON通過key查找value
const char *str = cJSON_Print(cJSON_GetObjectItem(json, "age"))
a.json為原始cJSON類型指針,age為key,str為返回接收的char *
b.如果返回的value為int 等整型,可以調用atoi(const char * str)函數
int x = atoi(str);
cJSON_Print函數返回值的字符串會加雙引號,解決方案為:
cJSON *json;
json = cJSON_Parse(text);
cJSON_GetObjectItem(json, "Action")->valuestring
這樣返回的值沒有雙引號就是key對應的字符串本身。
二、MICO json
鏈接:https://pan.baidu.com/s/1wp056fwrK8WUeyyk1zKgcg
提取碼:ulr5
詳細官方說明
http://developer.mxchip.com/handbooks/117
一個簡單的demo
json_c demo #include <stdio.h> #include "json.h" #include <stdint.h> int main() { char buf[] = " {\"name\":\"zhangsan\"} "; json_object *new_obj = NULL; char body[40]; new_obj = json_tokener_parse(buf);//字符串類型轉json類型 if (is_error(new_obj)) { memset(body, 0x00, 40); sprintf(body, " {\"dat\":\"err\"} "); } json_object_object_foreach(new_obj, key, val)//通過json中的key查找value值 { if (!strcmp(key, "name")) { printf("name:%s\n",json_object_get_string(val)); //取出當前value值 } } return 0; } 其中非常常用的三個函數: 1.字符串轉json類型 json_tokener_parse 2.輪詢json中的所有鍵值對,其實這個不是個函數,是通過一個宏實現的輪詢 json_object_object_foreach 3.取出當前鍵值對中的值,返回值為字符串類型 json_object_get_string