JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,常用于前后端數據傳輸和存儲。在golang中,使用標準庫中的encoding/json包可以方便地處理JSON數據。本文將介紹如何使用golang和C語言來解析JSON數據。
首先,我們來看一下golang中如何解析JSON數據。encoding/json包中提供了Marshal()和Unmarshal()兩個函數,用于將JSON數據轉換為golang的結構體或將golang的結構體轉換為JSON數據。下面是一個簡單的例子:
type Person struct { Name string `json:"name"` Age int `json:"age"` } jsonStr := `{"name":"Tom","age":18}` var p Person err := json.Unmarshal([]byte(jsonStr), &p) if err != nil { fmt.Println(err) } fmt.Println(p.Name, p.Age)
在上面的例子中,我們定義了一個Person結構體,并使用json標簽指定了JSON字符串上的字段名。然后使用json.Unmarshal()函數將JSON字符串解析為Person結構體。如果解析失敗,會返回一個非空的錯誤對象。最后打印出Person對象的Name和Age屬性。
接下來,我們來看一下C語言中如何解析JSON數據。C語言中沒有現成的JSON解析庫,但我們可以使用第三方庫cJSON來解析JSON數據。cJSON是一個輕量級的JSON解析庫,其實現簡單、使用方便。下面是一個簡單的例子:
#include <stdio.h> #include <cJSON.h> int main() { char *jsonStr = "{\"name\":\"Tom\",\"age\":18}"; cJSON *root = cJSON_Parse(jsonStr); if(root == NULL) { printf("parse error!\n"); return -1; } cJSON *name = cJSON_GetObjectItem(root, "name"); cJSON *age = cJSON_GetObjectItem(root, "age"); if(name == NULL || age == NULL) { printf("get item error!\n"); cJSON_Delete(root); return -1; } printf("%s %d\n", name->valuestring, age->valueint); cJSON_Delete(root); return 0; }
在上面的例子中,我們首先定義了一個JSON字符串,然后使用cJSON_Parse()函數將其解析為cJSON對象。如果解析失敗,cJSON_Parse()函數會返回NULL。接著,我們使用cJSON_GetObjectItem()函數獲取JSON對象中的對應字段值。如果獲取失敗,cJSON_GetObjectItem()函數會返回NULL。最后將字段值打印出來并釋放內存。