当前位置:   article > 正文

【cJSON】使用教程(构造、解析、插入、删除、修改)_cjson用法

cjson用法

一、cJSON简介

JSON是一种文本数据交换格式,独立与语言存在。
基本格式为key:value形式,还有数组。

例如:

  1. {
  2. "action":"set",
  3. "mac":["00:17:62:51:29:21"],
  4. "password":"admin",
  5. "dataList":
  6. [{
  7. "url_path":"/apply.cgi",
  8. "method":"POST",
  9. "Template":"register",
  10. "data":
  11. {
  12. "action":"mode_set",
  13. "mode":"1",
  14. "username":"prouser",
  15. "password":"admin"
  16. }
  17. }]
  18. }

cJSON是一个c语言编写的JSON解释器,仅有一个cJSON.h和cJSON.c文件。

附链接:cJSON

二、cJSON用法

1.构造/解析cJSON
  1. 示例:
  2. {
  3. "action":"mode_set",
  4. "mode":1
  5. }
  6. 构造数据:
  7. cJSON *JsData = cJSON_CreateObject();
  8. cJSON_AddStringToObject(JsData, "action", "mode_set");
  9. cJSON_AddNumberToObject(JsData, "mode", 1);
  10. 解析数据:
  11. char c1Data[100] =
  12. "
  13. {
  14. \"action\":\"cloud_set\",
  15. \"mode\":1
  16. }
  17. "
  18. cJSON *JsData = NULL;
  19. cJSON *pValue = NULL;
  20. JsData = cJSON_Parse(c1Data);
  21. pValue = cJSON_GetObjectItem(JsData, "action");
  22. printf("action : %s \r\n", pValue->valuestring);
  23. pValue = cJSON_GetObjectItem(JsData, "mode");
  24. printf("mode : %d \r\n", pValue->valuestring);
  25. 扩展:
  26. 组数据时,还有以下api
  27. cJSON_AddBoolToObject(object, key, value);
  28. cJSON_AddFalseToObject(object, key);
  29. cJSON_AddTrueToObject(object, key);
  30. cJSON_AddNullToObject(object, null);
2.嵌套JSON 
  1. {
  2. "action":"mode_set",
  3. "mode":1
  4. "datalist":
  5. {
  6. "username":"admin",
  7. "password":"admin"
  8. }
  9. }
  10. 组数据:
  11. cJSON *JsDataList = cJSON_CreateObject();
  12. cJSON_AddItemToObject(JsData, JsDataList);
  13. cJSON_AddStringToObject(JsDataList, "username", "admin");
  14. cJSON_AddStringToObject(JsDataList, "password", "admin");
  15. 解析数据:
  16. cJSON *JsDataList = NULL;
  17. cJSON *pValue = NULL;
  18. JsDataList = cJSON_GetObjectItem(JsData, "datalist");
  19. pValue = cJSON_GetObjectItem(datalist, "username");
  20. printf("username : %s \r\n", pValue->valuestring);
  21. pValue = cJSON_GetObjectItem(datalist, "password");
  22. printf("password : %s \r\n", pValue->valuestring);
3.数组 
  1. 示例:
  2. {
  3. "action":"mode_set",
  4. "mode":1,
  5. "datalist":
  6. {
  7. "username":"admin",
  8. "password":"admin"
  9. }
  10. "register":
  11. ["{
  12. "status":"0",
  13. "msg":"Success."
  14. }"]
  15. }
  16. 组数据:
  17. cJSON *JsRegisterArr = cJSON_CreateArray();
  18. cJSON *JsRegisterObj = cJSON_CreateObject();
  19. cJSON_AddItemToObject(JsData, "register", JsRegisterArr);
  20. cJSON_AddItemToArray(JsRegisterArr, JsRegisterObj);
  21. cJSON_AddStringToObject(JsRegisterObj, "status", "0");
  22. cJSON_AddStringToObject(JsRegisterObj, "msg", "Success");
  23. 解析数据:
  24. cJSON *JsRegisterArr = NULL;
  25. cJSON *JsRegisterObj = NULL;
  26. cJSON *pValue = NULL;
  27. UINT4 u4DataSize = 0;
  28. JsRegisterArr = cJSON_GetObjectItem(JsData, "register");
  29. u4DataSize = cJSON_GetArraySize(JsRegisterArr);
  30. for (UINT4 u4Index = 0; u4Index < u4DataSize; u4Index ++)
  31. {
  32. JsRegisterObj = cJSON_GetArrayItem(JsRegisterArr, u4Index)
  33. pValue = cJSON_GetObjectItem(JsRegisterObj, "status");
  34. printf("status : %s \r\n", pValue->valuestring);
  35. pValue = cJSON_GetObjectItem(JsRegisterObj, "msg");
  36. printf("msg : %s \r\n", pValue->valuestring);
  37. }
4.替换和删除cJSON
  1. 示例:
  2. {
  3. "action":"mode_set",
  4. "mode":1
  5. "datalist":
  6. {
  7. "username":"admin",
  8. "password":"admin"
  9. }
  10. }
  11. 替换password:
  12. cJSON *JsDataList = NULL;
  13. cJSON_ReplaceItemInObject(JsDataList, "password", "admin123");
  14. 删除password:
  15. cJSON_DeleteItemFromObject(JsDataList, "password");
5.格式化输出cJSON数据 
  1. UINT1 *pu1Data = NULL;
  2. UINT1 au1Data[1024] = {0};
  3. pu1Data = cJSON_PrintUnformatted(JsData);
  4. SPRINTF(au1Data, pu1Data);
6.内存申请与释放
  1. 以下函数调用时都会申请内存,如果不释放内存会造成内存泄露:
  2. cJSON_Parse();
  3. cJSON_CreateObject();
  4. cJSON_CreateArray();
  5. cJSON_Print();
  6. cJSON_PrintUnformatted();
  7. 释放内存:
  8. cJSON_Delete();
  9. cJSON_free();
  10. 用法解释:
  11. 1.调用cJSON_Parse,cJSON_CreateObject,cJSON_CreateArray时,使用cJSON_Delete释放内存,
  12. 比如JsData = cJSON_CreateObject(), DataListArr = cJSON_CreateArray();cJSON_AddItemToArray(DataListArr, JsData);
  13. 这种情况只要cJSON_Delete(JsData), 这样也会同时释放DataListArr的内存。
  14. 2.如果是调用cJSON_Print,cJSON_PrintUnformatted时,则使用cJSON_free();
  15. 建议:
  16. 因为涉及申请内存及释放内存,所以在每次creat一个cJSON后,使用前都要判空。
  17. cJSON *JsData = NULL;
  18. JsData = cJSON_CreateObject();
  19. if (JsData == NULL)
  20. return FAILURE;

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

闽ICP备14008679号