JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,被廣泛應(yīng)用于各種編程語(yǔ)言中的數(shù)據(jù)交互。而C語(yǔ)言作為一種廣泛使用的編程語(yǔ)言,對(duì)于JSON的處理也有著比較成熟的方法。
使用JSON可以解決很多數(shù)據(jù)傳遞和存儲(chǔ)的問(wèn)題,尤其在前后端分離的開(kāi)發(fā)模式下,JSON的使用變得更為重要。JSON的語(yǔ)法簡(jiǎn)單易懂,同時(shí)也支持動(dòng)態(tài)的TR(Table Row),這個(gè)特性可以用于動(dòng)態(tài)添加和刪除表格行的需求。
#include <stdio.h>#include <stdlib.h>#include <jansson.h>int main() { char *json_string = "{ \"name\": \"Alice\", \"age\": 18, \"score\": [85, 90, 92] }"; json_t *root; json_error_t error; // 解析JSON root = json_loads(json_string, 0, &error); if(!root) { printf("Parse error on line %d: %s\n", error.line, error.text); return 1; } // 讀取JSON數(shù)據(jù) const char *name; int age; json_t *score; int score_count; json_unpack(root, "{s:s,s:i,s:O}", "name", &name, "age", &age, "score", &score); score_count = json_array_size(score); printf("%s, %d years old\n", name, age); printf("Scores:"); for(int i = 0; i < score_count; i++) { int score_i = json_integer_value(json_array_get(score, i)); printf(" %d", score_i); } // 構(gòu)建動(dòng)態(tài)TR printf("<table>"); for(int i = 0; i < score_count; i++) { int score_i = json_integer_value(json_array_get(score, i)); printf("<tr><td>%d</td></tr>", score_i); } printf("</table>"); // 釋放JSON對(duì)象 json_decref(root); return 0; }
上述代碼演示了在C語(yǔ)言中解析JSON并以動(dòng)態(tài)TR的方式在HTML中顯示分?jǐn)?shù)表格的過(guò)程。C語(yǔ)言有很多成熟的JSON庫(kù)可供選擇,本例使用了jansson庫(kù)。在解析JSON和處理數(shù)據(jù)的過(guò)程中,可以使用json_unpack函數(shù)讀取和操作JSON數(shù)據(jù)。在讀取完分?jǐn)?shù)之后,使用循環(huán)構(gòu)建動(dòng)態(tài)TR,將分?jǐn)?shù)依次添加到表格行中,最終輸出HTML代碼。