我正在使用 cJSON 解析存储在testdata.json
文件中的 JSON,如下所示:
{
"text": "HelloWorld!!",
"parameters": [{
"length": 10
},
{
"width": 16
},
{
"height": 16
}
]
}
通过以下内容,我可以访问该text
字段。
int main(int argc, const char * argv[]) {
//open file and read into buffer
cJSON *root = cJSON_Parse(buffer);
char *text = cJSON_GetObjectItem(root, "text")->valuestring;
printf("text: %s\n", text);
}
注意:这些参数是动态的,因为根据 JSON 文件包含的内容,可以有更多参数,例如volume
、等。area
这个想法是我有一个struct
包含所有这些参数的,我必须检查 JSON 中提供的参数是否存在并相应地设置值。struct
看起来像:
typedef struct {
char *path;
int length;
int width;
int height;
int volume;
int area;
int angle;
int size;
} JsonParameters;
我试着这样做:
cJSON *parameters = cJSON_GetObjectItem(root, "parameters");
int parameters_count = cJSON_GetArraySize(parameters);
printf("Parameters:\n");
for (int i = 0; i < parameters_count; i++) {
cJSON *parameter = cJSON_GetArrayItem(parameters, i);
int length = cJSON_GetObjectItem(parameter, "length")->valueint;
int width = cJSON_GetObjectItem(parameter, "width")->valueint;
int height = cJSON_GetObjectItem(parameter, "height")->valueint;
printf("%d %d %d\n",length, width, height);
}
这返回Memory access error (memory dumped)
加上我必须说明什么是键。如前所述,我不知道参数是什么。
如何存储键值对("length":10
、"width":16
等"height":16
)以及如何根据 中的有效参数检查键JsonParameters
?