前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cJSON使用(一)

cJSON使用(一)

作者头像
李小白是一只喵
发布2020-04-24 08:37:31
2.3K0
发布2020-04-24 08:37:31
举报
文章被收录于专栏:算法微时光算法微时光

目录

cJSON使用(一)

cJSON使用(二)

cJSON介绍

cJSON是一个超轻巧,携带方便,单文件,简单的可以作为ANSI-C标准的JSON解析器。

cJSON,目前来说,就只有两个文件,一个cJSON.c 一个cJSON.h文件。使用的时候,自己创建好一个main.c文件后,将头文件include进去。

主要的结构体介绍

这里有个很重要的结构体是需要用到的就是cJSON 结构体如下:

代码语言:javascript
复制
typedef struct cJSON {
  struct cJSON *next,*prev;      /* 遍历数组或对象链的前向或后向链表指针*/
  struct cJSON *child;           /*数组或对象的孩子节点*/
  int type;                      /* key的类型*/
  char *valuestring;             /*字符串值*/
  int valueint;                  /* 整数值*/
  double valuedouble;            /* 浮点数值*/
  char *string;                  /* key的名字*/
} cJSON;

cJSON主要API

API

说明

cJSON_Version()

获得cJSON的版本

cJSON_InitHooks()

初始化cJSON_Hooks结构体

cJSON_Parse()

将字符串解析成cJSON结构体

cJSON_ParseWithOpts()

使用一些配置解析字符串

cJSON_Print()

将cJSON结构体转换成格式化的字符串

cJSON_PrintUnformatted()

将cJSON结构体转换成未格式化的字符串

cJSON_PrintBuffered()

将cJSON结构体使用buffer的字符串,格式化可选

cJSON_Delete()

删除cJSON结构体

cJSON_GetArraySize()

返回Array类型的大小,对Object类型也是有效的

cJSON_GetArrayItem()

返回Array类型的index的值,对Object类型也有效

cJSON_GetObjectItem()

使用key获得对应的value

cJSON_HasObjectItem()

判断是否ObjectItem存在

cJSON_IsInvalid()

类型判断

cJSON_IsFalse()

类型判断

cJSON_IsTrue()

类型判断

cJSON_IsBool()

类型判断

cJSON_IsNull()

类型判断

cJSON_IsNumber()

类型判断

cJSON_IsString()

类型判断

cJSON_IsArray()

类型判断

cJSON_IsObject()

类型判断

cJSON_IsRaw()

类型判断

cJSON_free()

cJSON的free函数,调用free函数

使用例子

待解析的文件:

代码语言:javascript
复制
{"syslog_db":[{"db_user":"xxx","db_password":"yyy","db_type":"ORACLE","db_ip":"172.16.1.248","db_port":"1521","db_name":"orcl","sql":"select * from syslog"}],
"syslog_source":[{"send_ip":"172.0.0.8","send_port":"8","send_protocal":"TCP"}],
"syslog_enable":"1"
}

代码:

代码语言:javascript
复制
#include <stdio.h>
#include "cJSON.h"

int main() {
    FILE            *fp = NULL;
    cJSON           *json;
    char            *out;
    char            line[1024] = {0};

    if(NULL != (fp = fopen("./test.ply", "r"))) {
        while (NULL != fgets(line, sizeof(line), fp)) {
            json=cJSON_Parse(line); //获取整个大的句柄
            out=cJSON_Print(json);  //这个是可以输出的。为获取的整个json的值
            cJSON *arrayItem = cJSON_GetObjectItem(json,"syslog_db"); //获取这个对象成员
            cJSON *object = cJSON_GetArrayItem(arrayItem,0);   //因为这个对象是个数组获取,且只有一个元素所以写下标为0获取
            
        /*下面就是可以重复使用cJSON_GetObjectItem来获取每个成员的值了*/
            cJSON *item = cJSON_GetObjectItem(object,"db_user");  //
            printf("db_user:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_password");
            printf("db_password:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_type");
            printf("db_type:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_ip");
            printf("db_ip:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_port");
            printf("db_port:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"db_name");
            printf("db_name:%s\n",item->valuestring);

            item = cJSON_GetObjectItem(object,"sql");
            printf("db_sql:%s\n",item->valuestring);
        

       /*这里这个是直接可以获取值的*/
            arrayItem = cJSON_GetObjectItem(json,"syslog_enable");
            printf("%s\n",arrayItem->valuestring);
        }
    }
        cJSON_Delete(json);
    close(fp);
}

参考

C - CJSON

CJSON 使用介绍

C语言cJSON库的使用,解析json数据格式

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • cJSON介绍
  • 主要的结构体介绍
  • cJSON主要API
  • 使用例子
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档