Redis作為一種基于內存的高性能鍵值存儲,常常被用來存儲JSON數據。在C語言中,我們可以使用hiredis庫來操作Redis。下面我們來看看如何在C中存取JSON數據。
首先,我們需要使用hiredis連接Redis。
redisContext* c = redisConnect("localhost", 6379); if (c == NULL || c->err) { //連接Redis失敗 return; }
接下來,我們可以使用Redis的SET命令來存儲JSON數據。
//構造JSON對象 json_t* json = json_object(); json_object_set_new(json, "name", json_string("Tom")); json_object_set_new(json, "age", json_integer(20)); //將JSON對象轉換為字符串 char* json_str = json_dumps(json, JSON_COMPACT); //將JSON字符串存儲到Redis中 redisReply* reply = redisCommand(c, "SET %s %s", "person", json_str); //釋放動態分配的內存 free(json_str); json_decref(json); if (reply == NULL) { //存儲失敗 return; } freeReplyObject(reply);
使用GET命令可以獲取JSON數據。
redisReply* reply = redisCommand(c, "GET %s", "person"); if (reply == NULL || reply->type != REDIS_REPLY_STRING) { //獲取失敗 return; } //將JSON字符串轉換為JSON對象 json_error_t error; json_t* json = json_loads(reply->str, 0, &error); if (json == NULL) { //轉換失敗 return; } //獲取對象中的屬性 char* name; json_integer_t age; if (json_unpack(json, "{s:s,s:I}", "name", &name, "age", &age) == -1) { //解析失敗 return; } //使用獲取到的屬性 printf("name: %s\n", name); printf("age: %d\n", age); //釋放動態分配的內存 free(name); json_decref(json); freeReplyObject(reply);
以上代碼演示了如何在C語言中存取JSON數據。當然,實際應用中需要注意異常處理和內存管理等問題。