完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.JSON简介
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。类似 XML,但是比XML 更小、更快,更易解析。 2.JSON语法 JSON 是存储和交换文本信息的语法。既然是语法,就有它的规则。 JSON语法规则总结起来就四点: 1.数据在名称/值对中 2.数据由逗号分隔 3.花括号保存对象 4.方括号保存数组 具体语法实例请自行查询 3.C语言实现 C语言打包和解析JSON有相关库函数下载。 核心文件:cJSON.h、cJSON.c 将cJSON.h、cJSON.c添加到工程中即可使用。 实例: #include #include #include "cJSON.h" #include "stdbool.h" typedef int BOOL; #define TRUE 1 #define FALSE 0 char* strJson; char* MakeJson()//打包 { cJSON *temp = cJSON_CreateObject(); if (temp == NULL) { //创建失败 return FALSE; } //加入节点(键值对) cJSON_AddStringToObject(temp, "firstname", "Brett"); cJSON_AddStringToObject(temp, "lastName", "McLaughlin"); cJSON_AddNumberToObject(temp, "id", 1); cJSON * array = cJSON_CreateArray(); if (array == NULL) { //创建失败 return FALSE; } cJSON_AddItemToArray(array, temp); cJSON *root = cJSON_CreateObject(); if (root == NULL) { //创建失败 return FALSE; } cJSON_AddItemToObject(root, "programmers", array); strJson = cJSON_Print(root); cJSON_Delete(root); } BOOL ParseJson(const char* jsonStr)//解析 { cJSON* root = cJSON_Parse(jsonStr); BOOL ret = FALSE; if (root != NULL) { cJSON* programmersNode = cJSON_GetObjectItem(root, "programmers"); if (programmersNode != NULL) { int iSize = cJSON_GetArraySize(programmersNode); if (iSize == 1) //iSize 表示数组个数 { cJSON* programmers[3] = {0}; int i=0; for (i = 0; i < iSize ; ++i) { programmers = cJSON_GetArrayItem(programmersNode, i); if (programmers != NULL) { cJSON* firstName = cJSON_GetObjectItem(programmers, "firstName"); cJSON* lastName = cJSON_GetObjectItem(programmers, "lastName"); cJSON* id = cJSON_GetObjectItem(programmers, "id"); if (firstName != NULL && lastName != NULL && id != NULL) { printf("id:%dn",id->valueint); printf("FirstName:%sn",firstName->valuestring); printf("lastName:%sn",lastName->valuestring); } else { cJSON_Delete(root); return FALSE; } } } ret = TRUE; } } } cJSON_Delete(root); return ret; } int main() { MakeJson(); if(strJson)printf("%sn",strJson); //输出json else printf("MAKE NOn"); //打包失败 if(ParseJson(strJson)) printf("ParseJson OKn"); //解析成功 else printf("ParseJson NOn"); //解析失败 free(strJson); return 0; } **注:上述代码可能存在一些内存泄露,正在完善 ** |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1178浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 03:32 , Processed in 1.249924 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号