Json   发布时间:2022-04-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据。2)创建json数组和解析json数组

1、创建json,从json中获取数据

  1 #include <stdio.h>                                                                                            
  2 #include "cJSON.h"
  3 
  4 char * makeJson()
  5 {
  6     cJSON * pJsonRoot = NULL;
  7 
  8     pJsonRoot = cJSON_CreateObject();
  9     if(NULL == pJsonRoot)
 10     {
 11         //error happend here
 12         return NULL;
 13     }
 14     cJSON_AddStringToObject(pJsonRoot,Hello",0); line-height:1.5!important">Hello world");
 15     cJSON_AddnumberToObject(pJsonRoot,0); line-height:1.5!important">number10010);
 16     cJSON_AddBoolToObject(pJsonRoot,0); line-height:1.5!important">bool1);
 17     cJSON * pSubJson = NULL;
 18     pSubJson = cJSON_CreateObject();
 19     if(NULL == pSubJson)
 20     {
 21          create object faild,exit
 22         cJSON_delete(pJsonRoot);
 23          24     }
 25     cJSON_AddStringToObject(pSubJson,0); line-height:1.5!important">subjsonobja sub json String 26     cJSON_AddItemToObject(pJsonRoot,0); line-height:1.5!important">subobj",pSubJson);
 27 
 28     char * p = cJSON_Print(pJsonRoot);
 29    else use : 
 30      char * p = cJSON_PrintUnformatted(pJsonRoot);
 31     if(NULL == p)
 32     {
 33         convert json list to String faild,exit
 34         because sub json pSubJson han been add to pJsonRoot,so just delete pJsonRoot,if you also delete pSubJson,it will coredump,and error is : double free
 35         cJSON_delete(pJsonRoot);
 36          37     }
 38     free(p);
 39     
 40     cJSON_delete(pJsonRoot);
 41 
 42     return p;
 43 }
 44 
 45 void parseJson(char * pMsg)
 46 {
 47     if(NULL == pMsg)
 48     {
 49         return;
 50     }
 51     cJSON * pJson = cJSON_Parse(pMsg);
 52     if(NULL == pJson)                                                                                         
 53     {
 54          parse faild,return
 55       return ;
 56     }
 57 
 58      get String from json
 59     cJSON * pSub = cJSON_GetObjectItem(pJson,128); line-height:1.5!important"> 60     if(NULL == pSub)
 61     {
 62         get object named "Hello" faild
 63     }
 64     printf(obj_1 : %s\n:rgb(128,pSub->valueString);
 65 
 66      get number from json
 67     pSub = cJSON_GetObjectItem(pJson,128); line-height:1.5!important"> 68      69     {
 70         get number from json faild
 71     }
 72     printf(obj_2 : %d\n:rgb(128,pSub->valueint);
 73 
 74      get bool from json
 75     pSub = cJSON_GetObjectItem(pJson,128); line-height:1.5!important"> 76      77     {
 78          get bool from json faild
 79     }                                                                                                         
 80     printf(obj_3 : %d\n 81 
 82   get sub object
 83     pSub = cJSON_GetObjectItem(pJson,128); line-height:1.5!important"> 84      85     {
 86          get sub object faild
 87     }
 88     cJSON * pSubSub = cJSON_GetObjectItem(pSub,128); line-height:1.5!important"> 89     if(NULL == pSubSub)
 90     {
 91          get object from subject object faild
 92     }
 93     printf(sub_obj_1 : %s\n:rgb(128,pSubSub->valueString);
 94 
 95     cJSON_delete(pJson);
 96 }
 97 
 98 int main()
 99 {
100     char * p = makeJson();
101     102     {
103         return 0;
104     }
105     printf(%s\n:rgb(128,p);
106     parseJson(p);                                                                                             
107   free(p);  //千万不要忘记释放内存呀,cJSON_Print()函数或者cJSON_PrintUnformatted()产生的内存,使用free(char *)进行释放
108     109 }

centos下编译通过,运行结果如下

1 { 2 ": :rgb(128, 3 10010,128); line-height:1.5!important"> 4 ": true,128); line-height:1.5!important"> 5 ": { 6 7 } 8 } 9 obj_1 : Hello world 10 obj_2 : 10010 11 obj_3 : 1 12 sub_obj_1 : a sub json String
代码解释如下:

CJSON在内存中的存储方式是用链表进行存储的,所以在进行操作的时候,我们可见的部分全部是用指针进行操作的。

第8行新建一个JSON项目。

第14、15、16行分别添加了字符串、数字和bool变量。

第18行新建一个JSON项目:pSubJson。

第25行在新建的pSubJson项目上添加字符串。

第26行把我们的新项目添加到最初的项目pJsonRoot上。

第28行把CJSON的内存的存储的数据转换为字符串格式。

cjson库的 百度网盘 下载地址在:http://pan.baidu.com/s/1ntsRLgt

结果分析:

第1到8行为创建的JSON字符串

第9到12行为从JSON解析得到的数据

2、创建json数组和解析json数组

1 创建数组,数组值是另一个JSON的item,这里使用数字作为演示 2 char * makeArray(int iSizE) 3 { 4 cJSON * root = cJSON_CreateArray(); 5 if(NULL == root) 6 { 7 printf(create json array faild\n 8 9 } 10 int i = 11 12 for(i = 0; i < iSize; i++) 13 { 14 cJSON_AddnumberToObject(root,0); line-height:1.5!important">hehe:rgb(128,i); 15 } 16 char * out = cJSON_Print(root); 17 cJSON_delete(root); 18 19 return out; 20 } 21 22 解析刚刚的CJSON数组 23 void parseArray(char * pJson) 24 { 25 if(NULL == pJson) 26 { 27 28 } 29 cJSON * root = NULL; 30 if((root = cJSON_Parse(pJson)) == NULL) 31 { 32 33 } 34 int iSize = cJSON_GetArraySize(root); 35 for(int iCnt = 0; iCnt < iSize; iCnt++) 36 { 37 cJSON * pSub = cJSON_GetArrayItem(root,iCnt); 38 39 { 40 conTinue; 41 } 42 int iValue = pSub->valueint; 43 printf(value[%2d] : [%d]\n:rgb(128,iCnt,ivalue); 44 } 45 cJSON_delete(root); 46 47 }
输出结果

1)创建JSON数组

[0,128); line-height:1.5!important">1
,128); line-height:1.5!important">2,128); line-height:1.5!important">3,128); line-height:1.5!important">4,128); line-height:1.5!important">5,128); line-height:1.5!important">6,128); line-height:1.5!important">7,128); line-height:1.5!important">8,128); line-height:1.5!important">9]

2)解析数组的输出结果

value[ 0] : [0]
value[ 1] : [1]
value[ 2] : [2]
value[ 3] : [3]
value[ 4] : [4]
value[ 5] : [5]
value[ 6] : [6]
value[ 7] : [7]
value[ 8] : [8]
value[ 9] : [9]
本图文内容来源于网友网络收集整理提供,作为学习参使用,版权属于原作者。
@H_489_807@

猜你在找的Json相关文章

  jsonp需要在页面中添加一个<script>元素,由该元素来从其他服务器加载json数据。 <body> <script src="js/jsonp.js?callBACk=showEvents"></script>  //从服务器获取的文件,在URL后面加入想要获取的属性 </body>   web浏览器本身需要一个处理json的函数 //这个函数专门用来处理json数据的
<script> var testApi = "地址"; $.ajax({ url:testApi,//可以不是本地域名 type:‘post‘, dataType:‘jsonp‘, //jsonp格式访问 jsonpCallBACk:‘test‘ //获取数据的函数 }) .done(function(data){ if (data.status == 1) { console.log(‘成功‘
最近开发中遇到调用第三方web_api的功能,后端在处理json数据时使用fastjson来做反序列化,由于调用api返回的数据格式主体部分过于繁杂且没有太多可抽象的特征,所以只对头部(返回JSON最外层请求状态部分)进行了简单的分割,之后把剩下的主题内容进行数据库存储操作,并将结果返回给前端,由前端根据不同页面再做解析。 这样做的好处是,如果未来需求有变动(现在看来变动基本没跑了),我们不需要重
JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读、编写、解析。jsoncpp是c++解析JSON串常用的解析库之一。   jsoncpp中主要的类: Json::Value:可以表示所有支持的类型,如:int , double ,String , object, array等。其包含节点的类型判断(isNull,isBool,isInt,is
var newScript = document.createElement(‘script‘); newScript.setAttribute("src", "http://192.168.255.14:8546/countrys_p.txt"); newScript.setAttribute("type", "text/javascript");
$.ajax({ url:"http://192.168.100.47:8080/ais-connect/data/newaisSyn", type:‘GET‘, dataType:‘JSONP‘, jsonp: ‘callBACk‘,
1.list中放入同一个对象,会出现内存地址引用{"$ref":"#[0]"},后台可以识别,但是前台不会识别 @Test public void testList(){ User user = new User(); user.setUserName("cgx"); user.setpassword("123456");
static class TempClass{ private String name; private int age; public String getName() {return name;} public void setName(String Name) {this.name = name;} public int getAge() {return age;} public void
@H_408_801@使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

微信公众号搜 "程序精选"关注

大佬总结

以上是大佬教程为你收集整理的使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解全部内容,希望文章能够帮你解决使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
猜你在找的Json相关文章