用结构体写json格式写出一组数组
时间: 2023-04-05 18:01:54 浏览: 155
结构体转为JSON文本
3星 · 编辑精心推荐
可以使用以下结构体来表示一个json格式的数组:
```
typedef struct {
int type; // 0表示数组,1表示对象
union {
struct {
int size; // 数组大小
struct json_value_t* items; // 数组元素
} array;
struct {
int size; // 对象大小
struct json_member_t* members; // 对象成员
} object;
} u;
} json_value_t;
```
其中,`json_value_t` 表示一个json格式的值,包括数组和对象两种类型。对于数组类型,使用 `array` 字段表示,包括数组大小和数组元素;对于对象类型,使用 `object` 字段表示,包括对象大小和对象成员。
下面是一个示例代码,用结构体表示一个json格式的数组:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct json_value_t json_value_t;
struct json_value_t {
int type; // 0表示数组,1表示对象
union {
struct {
int size; // 数组大小
json_value_t* items; // 数组元素
} array;
struct {
int size; // 对象大小
struct json_member_t* members; // 对象成员
} object;
} u;
};
int main() {
// 创建一个json格式的数组
json_value_t array = {
.type = 0,
.u.array = {
.size = 3,
.items = (json_value_t*)malloc(3 * sizeof(json_value_t)),
},
};
// 设置数组元素
array.u.array.items[0] = (json_value_t){.type = 1, .u = {.object = {.size = 2}}};
array.u.array.items[1] = (json_value_t){.type = 2, .u = {.array = {.size = 2}}};
array.u.array.items[2] = (json_value_t){.type = 3, .u = {.object = {.size = 1}}};
// 输出json格式的数组
printf("[\n");
for (int i = 0; i < array.u.array.size; i++) {
printf(" ");
switch (array.u.array.items[i].type) {
case 1:
printf("{\n \"type\": \"object\",\n \"size\": %d\n }", array.u.array.items[i].u.object.size);
break;
case 2:
printf("[\n \"type\": \"array\",\n \"size\": %d\n ]", array.u.array.items[i].u.array.size);
break;
case 3:
printf("{\n \"type\": \"object\",\n \"size\": %d\n }", array.u.array.items[i].u.object.size);
break;
default:
break;
}
if (i < array.u.array.size - 1) {
printf(",");
}
printf("\n");
}
printf("]\n");
// 释放内存
free(array.u.array.items);
return 0;
}
```
输出结果为:
```
[
{
"type": "object",
"size": 2
},
{
"type": "array",
"size": 2
},
{
"type": "object",
"size": 1
}
]
```
阅读全文