您的位置:

用CJSON解析JSON数据的技巧

一、什么是JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有可读性高,易于数据传输和解析的特点,因此被广泛应用于数据的传输和存储中。

JSON的基本数据类型包括数字、字符串、布尔值、数组、对象和null。例如,下面是一个包含三个学生信息的JSON数据:

{
  "students": [
    {
      "name": "Tom",
      "age": 18,
      "gender": "male"
    },
    {
      "name": "Lucy",
      "age": 19,
      "gender": "female"
    },
    {
      "name": "Jack",
      "age": 20,
      "gender": "male"
    }
  ]
}

二、CJSON简介

CJSON是一个轻量级的JSON解析库,其特点是占用内存小、解析速度快、易于使用。CJSON只有两个API,一个用于解析JSON数据,一个用于生成JSON数据。

CJSON的使用非常简单,只需要包含cJSON.h头文件即可。下面是一个简单的示例:

#include 
#include "cJSON.h"

int main()
{
  char *json_str = "{ \"name\": \"Tom\", \"age\": 18, \"gender\": \"male\" }";
  cJSON *root = cJSON_Parse(json_str);
  if (root != NULL) {
    cJSON *name = cJSON_GetObjectItem(root, "name");
    if (name != NULL) {
      printf("name: %s\n", name->valuestring);
    }
    cJSON_Delete(root);
  }
  return 0;
}

  

三、CJSON解析JSON数据的技巧

1. 解析基本数据类型

解析JSON数据的基本数据类型包括数字、字符串、布尔值和null。下面是一个示例:

#include 
#include "cJSON.h"

int main()
{
  char *json_str = "{ \"int\": 1, \"float\": 2.3, \"string\": \"hello\", \"bool_true\": true, \"bool_false\": false, \"null\": null }";
  cJSON *root = cJSON_Parse(json_str);
  if (root != NULL) {
    cJSON *int_val = cJSON_GetObjectItem(root, "int");
    if (int_val != NULL && cJSON_IsNumber(int_val)) {
      printf("int_val: %d\n", int_val->valueint);
    }
    cJSON *float_val = cJSON_GetObjectItem(root, "float");
    if (float_val != NULL && cJSON_IsNumber(float_val)) {
      printf("float_val: %f\n", float_val->valuedouble);
    }
    cJSON *string_val = cJSON_GetObjectItem(root, "string");
    if (string_val != NULL && cJSON_IsString(string_val)) {
      printf("string_val: %s\n", string_val->valuestring);
    }
    cJSON *bool_true_val = cJSON_GetObjectItem(root, "bool_true");
    if (bool_true_val != NULL && cJSON_IsTrue(bool_true_val)) {
      printf("bool_true_val: true\n");
    }
    cJSON *bool_false_val = cJSON_GetObjectItem(root, "bool_false");
    if (bool_false_val != NULL && cJSON_IsFalse(bool_false_val)) {
      printf("bool_false_val: false\n");
    }
    cJSON *null_val = cJSON_GetObjectItem(root, "null");
    if (null_val != NULL && cJSON_IsNull(null_val)) {
      printf("null_val: null\n");
    }
    cJSON_Delete(root);
  }
  return 0;
}

  

2. 解析数组

解析JSON数据中的数组,可以使用cJSON_GetArrayItem和cJSON_GetArraySize两个API。下面是一个示例:

#include 
#include "cJSON.h"

int main()
{
  char *json_str = "{ \"array\": [1, 2, 3] }";
  cJSON *root = cJSON_Parse(json_str);
  if (root != NULL) {
    cJSON *array_val = cJSON_GetObjectItem(root, "array");
    if (array_val != NULL && cJSON_IsArray(array_val)) {
      int array_size = cJSON_GetArraySize(array_val);
      printf("array_size: %d\n", array_size);
      for (int i = 0; i < array_size; i++) {
        cJSON *item = cJSON_GetArrayItem(array_val, i);
        if (item != NULL && cJSON_IsNumber(item)) {
          printf("item[%d]: %d\n", i, item->valueint);
        }
      }
    }
    cJSON_Delete(root);
  }
  return 0;
}

  

3. 解析对象

解析JSON数据中的对象,可以使用cJSON_GetObjectItem和cJSON_GetArraySize两个API。下面是一个示例:

#include 
#include "cJSON.h"

int main()
{
  char *json_str = "{ \"obj\": { \"name\": \"Tom\", \"age\": 18, \"gender\": \"male\" } }";
  cJSON *root = cJSON_Parse(json_str);
  if (root != NULL) {
    cJSON *obj_val = cJSON_GetObjectItem(root, "obj");
    if (obj_val != NULL && cJSON_IsObject(obj_val)) {
      cJSON *name = cJSON_GetObjectItem(obj_val, "name");
      if (name != NULL && cJSON_IsString(name)) {
        printf("name: %s\n", name->valuestring);
      }
      cJSON *age = cJSON_GetObjectItem(obj_val, "age");
      if (age != NULL && cJSON_IsNumber(age)) {
        printf("age: %d\n", age->valueint);
      }
      cJSON *gender = cJSON_GetObjectItem(obj_val, "gender");
      if (gender != NULL && cJSON_IsString(gender)) {
        printf("gender: %s\n", gender->valuestring);
      }
    }
    cJSON_Delete(root);
  }
  return 0;
}

  

四、总结

CJSON是一个非常轻量级的JSON解析库,使用简单,占用内存小,解析速度快。在实际开发中,我们经常需要解析JSON格式的数据,这时候CJSON就是一个不错的选择。

用CJSON解析JSON数据的技巧

2023-05-18
cjson解析和(cjson解析数组)

本文目录一览: 1、cjson数组如何解析 2、怎么用C语言获取JSON中的数据? 3、这种json怎么解析?[ "1", "2", "3", "4" ] 4、请教Qt如何解析出Json的数据 cjs

2023-12-08
cjson解析库(cjson解析数组)

本文目录一览: 1、【Lua】cjson解析null 2、cjson嵌套多少层 3、请教Qt如何解析出Json的数据 4、有哪些 C++ 的 JSON 库比较好 【Lua】cjson解析null 最近

2023-12-08
CJSON:C语言中的轻量级JSON解析库

2023-05-17
cjson创建json串(cjson生成json)

本文目录一览: 1、怎么用 C/C++ 把结构体数组转成 JSON串 2、python中cj什么意思 3、java怎么实现JSON打包UDP 4、请教Qt如何解析出Json的数据 5、怎么用C语言获取

2023-12-08
cjson汉字解析,cj的汉字

2022-11-24
linux下cjson使用,linux cjson

本文目录一览: 1、jsoncpp Linux详细用法(C++) 为什么我的jsoncpp就是读取不出东西来呢? 2、linux 下c程序哪一个json库比较好用 3、如何在linux中使用命令行解析

2023-12-08
cjson数组生产(cjson解析json数组)

本文目录一览: 1、怎么用C语言获取JSON中的数据? 2、json对象和json数组和数组的区别 3、怎么用 C/C++ 把结构体数组转成 JSON串 4、c# json对象中含有数组,数组中又含有

2023-12-08
cjson函数解析(cjson_print函数)

本文目录一览: 1、怎么用C语言获取JSON中的数据? 2、【Lua】cjson解析null 3、如何用ESP8266构建一个JSON树,并用JSON函数解析JSON数据 怎么用C语言获取JSON中的

2023-12-08
cjson压缩json,cJson库下载

本文目录一览: 1、有哪些 C++ 的 JSON 库比较好 2、cjson嵌套多少层 3、怎么用C语言获取JSON中的数据? 有哪些 C++ 的 JSON 库比较好 我现在用的是cJSON这个JSON

2023-12-08
cjson库的c文件,c++ cjson

本文目录一览: 1、请教Qt如何解析出Json的数据 2、怎么用C语言获取JSON中的数据? 3、cjson嵌套多少层 4、谁给推荐一个C++的JSON库 5、如何优雅地使用c语言编写爬虫 6、jav

2023-12-08
cjson结构体解析,cjson 解析

2022-11-24
cjson和jsonc(CJSON)

本文目录一览: 1、python中cj什么意思 2、java怎么实现JSON打包UDP 3、jquery ajax中都支持哪些返回类型AxmlBhtmlCjsonpDjson? 4、有哪些 C++ 的

2023-12-08
cjson代码生成,cjson生成json

本文目录一览: 1、C++ json解析 2、c#解析JSON的几种办法 3、谁给推荐一个C++的JSON库 C++ json解析 C++ 解析Json——jsoncppJSON(JavaScript

2023-12-08
包含包cjson的词条

本文目录一览: 1、怎么用C语言获取JSON中的数据? 2、我的MAC编译LUA-CJSON模块时报如下错误,求大神解答~~! 3、请教Qt如何解析出Json的数据 怎么用C语言获取JSON中的数据?

2023-12-08
python技巧笔记(python自学笔记)

2022-11-12
转cjson数组(cjson 数组)

本文目录一览: 1、怎么用C语言获取JSON中的数据? 2、怎样用C#把JSON数据转换为list或数组 3、怎么用 C/C++ 把结构体数组转成 JSON串 4、c语言的cjson怎样处理转义 怎么

2023-12-08
cjson类型,cjson使用

本文目录一览: 1、怎么用C语言获取JSON中的数据? 2、json是什么文件 3、JSON解析器json-c 怎么用C语言获取JSON中的数据? 用C语言获取JSON中的数据的方法是使用 CJSON

2023-12-08
cjson修改数据的简单介绍

本文目录一览: 1、怎么用C语言获取JSON中的数据? 2、C语言读取多行json文件数据 用哪种库比较好, 具体怎么操作 3、如何修改 cjson 4、请问json如何追加内容,并且修改,和删除操作

2023-12-08
cjson写入文件,cjson使用

2022-11-24