当前位置:   article > 正文

C 开源库之cJSON_c语言json解析库

c语言json解析库

cJSON简介 

        CJSON库是一个用于解析和生成JSON数据的C语言库。 它提供了一组函数,使得在C语言中操作JSON数据变得简单而高效。 您可以使用CJSON库来解析从服务器返回的JSON数据,或者将C语言数据结构转换为JSON格式以进行传输。

cJSON 使用

官网地址:https://sourceforge.net/projects/cjson/

cJSON只有一个cjson.h 和cjson.c 文件,可以很方便的集成到其他项目中。cJSON支持将JSON数据解析为cJSON对象,也支持将cJSON对象转换为JSON数据。cJSON的使用非常简单,只需要包含 cjson.h 头文件,然后调用相应的API即可完成JSON数据的解析和生成。

cJSON 数据生成

新增cjson_demo1.c 文件

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include "cJSON.h"
  5. /**
  6. * 目标:1、引入cjson 库依赖文件(cJSON.c/cJSON.h)
  7. * 2、cjson 库基本使用
  8. */
  9. int main(){
  10. // 第一步:创建cJSON 对象
  11. cJSON *jsonObject = cJSON_CreateObject();
  12. // 第二步:输出cJSON 对象
  13. char *content = cJSON_Print(jsonObject);
  14. printf("%s\n", content);
  15. // 第三步:cJSON 对象添加属性:基本属性之字符串
  16. cJSON_AddItemToObject(jsonObject, "name", cJSON_CreateString("周志刚"));
  17. content = cJSON_Print(jsonObject);
  18. printf("%s\n", content);
  19. // 第三步:cJSON 对象添加属性:基本属性之整形
  20. cJSON_AddItemToObject(jsonObject, "age", cJSON_CreateNumber(32));
  21. content = cJSON_Print(jsonObject);
  22. printf("%s\n", content);
  23. // 第三步:cJSON 对象添加属性:基本属性之bool
  24. cJSON_AddItemToObject(jsonObject, "man", cJSON_CreateBool(1));
  25. content = cJSON_Print(jsonObject);
  26. printf("%s\n", content);
  27. // 第三步:cJSON 对象添加属性:基本属性之NULL
  28. cJSON_AddItemToObject(jsonObject, "woman", cJSON_CreateNull());
  29. content = cJSON_Print(jsonObject);
  30. printf("%s\n", content);
  31. // 第四步:cJSON 对象添加属性:复杂属性之数组
  32. cJSON * childs = cJSON_CreateArray();
  33. cJSON_AddItemToArray(childs, cJSON_CreateString("周晨曦"));
  34. cJSON_AddItemToArray(childs, cJSON_CreateString("周晨宇"));
  35. cJSON_AddItemToObject(jsonObject, "childs", childs);
  36. content = cJSON_Print(jsonObject);
  37. printf("%s\n", content);
  38. // 第四步:cJSON 对象添加属性:复杂属性之cJSON对象
  39. cJSON *wife = cJSON_CreateObject();
  40. cJSON_AddItemToObject(wife, "name", cJSON_CreateString("王珍"));
  41. cJSON_AddItemToObject(jsonObject, "wife", wife);
  42. content = cJSON_Print(jsonObject);
  43. printf("%s\n", content);
  44. // 第五步:输出json 字符串到指定文件
  45. FILE *file = fopen("output.json", "w+");
  46. if(file == NULL){
  47. perror("fopen failed !!\n");
  48. return -1;
  49. }
  50. char buffer[1024];
  51. // 初始化
  52. memset(buffer, 0,1024);
  53. // 赋值
  54. strcpy(buffer, content);
  55. int length = strlen(buffer);
  56. // 文件写入
  57. if(fwrite(buffer, length, 1, file) <=0){
  58. perror("fwrite failed !!\n");
  59. return -1;
  60. }
  61. // 文件关闭
  62. fclose(file);
  63. // 释放cJSON 对象和字符串
  64. cJSON_Delete(jsonObject);
  65. free(content);
  66. return 0;
  67. }

编译:gcc cJSON.c cjson_demo1.c -o cjson_demo1 -lm

执行:./cjson_demo1

执行效果:

 

 cJSON 数据解析

新增cjson_demo2.c 文件

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include "cJSON.h"
  5. /**
  6. * 目标:1、引入cjson 库依赖文件(cJSON.c/cJSON.h)
  7. * 2、cjson 库基本使用
  8. */
  9. int main(){
  10. // 第一步:从指定文件读取json 字符串
  11. FILE *file = fopen("output.json", "r");
  12. if(file == NULL){
  13. perror("fopen failed !!\n");
  14. return -1;
  15. }
  16. char buffer[1024];
  17. // 初始化
  18. memset(buffer, 0,1024);
  19. // 文件读取
  20. fread(buffer, 1024, 1, file);
  21. // 文件关闭
  22. fclose(file);
  23. // 第二步:解析json 字符串
  24. cJSON *jsonObject = cJSON_Parse(buffer);
  25. if(jsonObject == NULL){
  26. perror("Parse failed!\n");
  27. return -1;
  28. }
  29. // 第三步:解析键值对
  30. cJSON *name =cJSON_GetObjectItem(jsonObject, "name");
  31. char *content = cJSON_Print(name);
  32. printf("%s\n", content);
  33. // 第四步: 解析JSON对象
  34. cJSON *wife = cJSON_GetObjectItem(jsonObject, "wife");
  35. content = cJSON_Print(wife);
  36. printf("%s\n", content);
  37. // 第五步: 解析JSON数组
  38. cJSON *childs = cJSON_GetObjectItem(jsonObject, "childs");
  39. content = cJSON_Print(childs);
  40. printf("%s\n", content);
  41. // 释放cJSON 对象和字符串
  42. cJSON_Delete(jsonObject);
  43. free(content);
  44. return 0;
  45. }

编译:gcc cJSON.c cjson_demo2.c -o cjson_demo2 -lm

执行:./cjson_demo2

执行效果:

 

cJSON 问题 

问题一:找不到pow和floor函数:undefined reference to pow' 和 undefined reference tofloor’

解决办法: 编译需要添加math库/libm,在编译代码中添加"-lm"。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/1005247
推荐阅读
相关标签
  

闽ICP备14008679号