欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c 組合json

張吉惟1年前8瀏覽0評論

在開發(fā)過程中,我們經(jīng)常需要使用 JSON 數(shù)據(jù)進(jìn)行前后端的數(shù)據(jù)交互。而組合 JSON 數(shù)據(jù)是一項經(jīng)常需要進(jìn)行的操作,本文將介紹使用 C 語言如何進(jìn)行組合 JSON 數(shù)據(jù)的操作。

代碼示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
// JSON 數(shù)據(jù)類型
typedef enum {
JSON_NULL,
JSON_FALSE,
JSON_TRUE,
JSON_NUMBER,
JSON_STRING,
JSON_ARRAY,
JSON_OBJECT
} json_type;
// JSON 數(shù)據(jù)結(jié)構(gòu)體
typedef struct {
json_type type;
} json_value;
// JSON 數(shù)字類型結(jié)構(gòu)體
typedef struct {
json_type type;
double number;
} json_number;
// 組合數(shù)字類型的 JSON 數(shù)據(jù)
static int json_parse_number(char *json, size_t len, json_value *value) {
double num = atof(json);
if (num == 0 && *json != '0') {
return JSON_NULL;
}
value->type = JSON_NUMBER;
json_number *number = (json_number *)malloc(sizeof(json_number));
number->number = num;
value->number = number;
return JSON_NUMBER;
}
// JSON 字符串類型結(jié)構(gòu)體
typedef struct {
json_type type;
char *string;
size_t length;
} json_string;
// 組合字符串類型的 JSON 數(shù)據(jù)
static int json_parse_string(char *json, size_t len, json_value *value) {
value->type = JSON_STRING;
json_string *string = (json_string *)malloc(sizeof(json_string));
string->string = (char *)malloc(len);
memcpy(string->string, json, len);
string->length = len;
value->string = string;
return JSON_STRING;
}
// JSON 數(shù)組類型結(jié)構(gòu)體
typedef struct {
json_type type;
size_t size;
json_value **array;
} json_array;
// 組合數(shù)組類型的 JSON 數(shù)據(jù)
static int json_parse_array(char *json, size_t len, json_value *value) {
value->type = JSON_ARRAY;
json_array *array = (json_array *)malloc(sizeof(json_array));
size_t size = 0;
array->array = (json_value **)malloc(sizeof(json_value *));
json_value dummy;
json_value *elem = NULL;
*array->array = &dummy;
while (true) {
int ret = json_parse(json, len, elem);
if (ret == JSON_NULL) {
break;
}
array->array = (json_value **)realloc(array->array, sizeof(json_value *) * (++size));
array->array[size - 1] = elem;
}
array->size = size;
value->array = array;
return JSON_ARRAY;
}
// JSON 對象類型結(jié)構(gòu)體
typedef struct {
json_type type;
size_t size;
} json_object;
// 組合對象類型的 JSON 數(shù)據(jù)
static int json_parse_object(char *json, size_t len, json_value *value) {
value->type = JSON_OBJECT;
json_object *object = (json_object *)malloc(sizeof(json_object));
object->size = 0;
value->object = object;
return JSON_OBJECT;
}
// 組合 JSON 數(shù)據(jù)
int json_parse(char *json, size_t len, json_value *value) {
switch (*json) {
case 'n': return json_parse_literal(json, len, "null", value);
case 't': return json_parse_literal(json, len, "true", value);
case 'f': return json_parse_literal(json, len, "false", value);
case '\"': return json_parse_string(json, len, value);
case '[': return json_parse_array(json, len, value);
case '{': return json_parse_object(json, len, value);
default: return json_parse_number(json, len, value);
case '\0': return JSON_NULL;
}
}

通過本文的介紹,我們可以了解到如何使用 C 語言進(jìn)行組合 JSON 數(shù)據(jù)的操作,將其用于前后端的數(shù)據(jù)交互中。同時,也可以看到 C 語言的語法和數(shù)據(jù)結(jié)構(gòu)對于 JSON 數(shù)據(jù)的組合和解析非常適合,是 C 語言開發(fā)中必不可少的一部分。