cJSON:封装与解析(一)

JSON:JavaScript Object Notation,一种数据交互格式。

cJSON:C 语言实现,用于封装和解析 json 数据。

cJSON开源地址:https://github.com/DaveGamble/cJSON

测试字符串:

{
    "name":"sdc",
    "age":24,
    "height":1.78
}

1. 封装

enum json_print_formate
{
    JSON_OUT_FORMATE = 0,    /*按 json 格式输出*/
    JSON_OUT_UNFORMATE,      /*以字符串形式输出*/
};

char *json_package(enum json_print_formate flag)
{
    cJSON *root = NULL;   
    char *out = NULL;

    root =cJSON_CreateObject();   /*根*/
    cJSON_AddStringToObject(root, "name", "sdc");  /*添加字符串*/
    cJSON_AddNumberToObject(root, "age", 24);      /*添加整型*/
    cJSON_AddNumberToObject(root, "height", 1.78);  /*添加浮点型*/

    if(JSON_OUT_FORMATE == flag)
    {
        out = cJSON_Print(root);   
    }
    else
    {
        out = cJSON_PrintUnformatted(root);/*将json形式打印成正常字符串形式*/
    }

    /*释放内存*/  
    cJSON_Delete(root);     

    return out;
}

2. 解析

void json_parse(char *json_string)
{
    cJSON *root = NULL;
    cJSON *name = NULL;
    cJSON *age = NULL;
    cJSON *height = NULL;
    
    root = cJSON_Parse(json_string); /*解析成json形式*/
    name = cJSON_GetObjectItem(root, "name");  /*获取键值内容*/
    age = cJSON_GetObjectItem(root, "age");
    height = cJSON_GetObjectItem(root, "height");

    printf("name:%s,age:%d,height:%f\n", name->valuestring, age->valueint, height->valuedouble);
 
    /*释放内存*/
    cJSON_Delete(root);  
}

3. 测试

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"cJSON.h"

int main()
{
    char *json_str = NULL;

    json_str = json_package(JSON_OUT_FORMATE);
    printf("formate:\n%s\n", json_str);
    json_parse(json_str);
    cJSON_free(json_str);

    json_str = json_package(JSON_OUT_UNFORMATE);
    printf("unformate:%s\n", json_str);
    json_parse(json_str);
    cJSON_free(json_str);
}

   CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(json_test)

include_directories(./)

aux_source_directory(./ SRC_FILES)

add_executable(${PROJECT_NAME} ${SRC_FILES})

4. 结果

formate:
{
	"name":	"sdc",
	"age":	24,
	"height":	1.78
}
name:sdc,age:24,height:1.780000
unformate:{"name":"sdc","age":24,"height":1.78}
name:sdc,age:24,height:1.780000

Note:

cJSON_Print(const cJSON *item) 和 cJSON_PrintUnformatted(const cJSON *item) 这两个函数会调用 malloc 分配内存,需要调用 cJSON_free(void *object) 进行释放。                                                                                                                                                                                                                                                                                                                                    下一篇                                                                                           

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值