cjson庫的移植和使用


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM