学习文章参考:
C语言:cJSON库用法详解☆☆☆☆☆
题目:
使用cJSON库对下面的JSON文件进行反序列化操作。ver和cloud的节点直接打印即可,data的数据节点解析后形成链表存储(将下面内容存为文件,读取后解析,推荐使用标准IO(fread)解析)。
{
"ver": "1.0",
"cloud": {
"password": "12345678",
"mpassword": "12345678"
},
"data": [{
"key": 1,
"type": 2,
"val": "10"
},
{
"key": 2,
"type": 1,
"val": "0"
},
{
"key": 3,
"type": 3,
"val": "22.5"
}
]
}
解析完成后,再利用解析完的变量和链表,序列化为json字符串直接打印即可。
注意:上面的所有val值都是string类型,解析出来存到节点前,需要根据type的类型来进行转换,按照相应的类型存储到共用体中。
提示:对于数据解析后,形成新的节点存放链表,最好的方式是为每个节点分配单独的内存。例:
struct data {
int key;
int type;
union val_t val;
struct list_head list;
};
struct data *node = (struct data *)malloc(sizeof(struct data));
node->xxx = xxx;
插入链表即可
编译注意事项
编译cJSON库时候,gcc需要增加 -l m选项,动态链接math库。
课上自行练习的答案(自己写的):
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include "cJSON.h"
#include "list.h"
typedef int BOOL;
union value
{
BOOL b_val; //bool类型存储空间
int i_val; //整形值存储空间
float f_val; //浮点值存储空间
};
struct data
{
int key;
int type;
union value val;
struct