首页 > 技术文章 > cjson库的移植和使用

bliss- 2020-02-28 14:34 原文

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

 

推荐阅读