CJSON是一個非常流行的C語言JSON庫,它可以輕松地將C語言結構體和變量序列化為JSON格式。但是,當我們需要序列化一個包含多個元素的列表時,應該如何實現呢?下面我們就來探討這個問題。
假設我們有以下的結構體和列表:
typedef struct Node {
int value;
struct Node* next;
} Node;
Node* list = NULL;
Node* tail = NULL;
void addNode(int value) {
Node* newNode = malloc(sizeof(Node));
newNode->value = value;
newNode->next = NULL;
if (list == NULL) {
list = newNode;
tail = newNode;
}
else {
tail->next = newNode;
tail = newNode;
}
}
addNode(1);
addNode(2);
addNode(3);
接下來,我們可以使用如下代碼將列表序列化為JSON字符串:
cJSON* root = cJSON_CreateArray();
Node* curr = list;
while (curr != NULL) {
cJSON_AddItemToArray(root, cJSON_CreateNumber(curr->value));
curr = curr->next;
}
char* jsonStr = cJSON_Print(root);
在上面的代碼中,我們首先創建了一個空數組節點root,然后遍歷列表,將每個節點的值添加到數組中。最后調用cJSON_Print函數將root節點序列化為JSON字符串。
當我們需要反序列化JSON字符串為列表時,可以使用如下代碼:
char* jsonStr = "[1,2,3]";
cJSON* root = cJSON_Parse(jsonStr);
cJSON* node = root->child;
while (node != NULL) {
addNode(node->valueint);
node = node->next;
}
cJSON_Delete(root);
在上面的代碼中,我們首先使用cJSON_Parse函數將JSON字符串解析為節點樹。然后遍歷樹,將每個節點的值添加到列表中。最后調用cJSON_Delete函數釋放節點樹的內存。
通過以上的代碼,我們可以輕松地將列表序列化為JSON格式并進行反序列化。希望這篇文章對你有所幫助!