在C語言開發中,經常需要將JSON格式的數據轉化為實體類,方便對數據進行操作和管理。本文介紹使用C語言如何將JSON轉為實體類。
首先需要使用一個開源的JSON解析庫,比如cjson,在GitHub上就有對應的代碼。
cJSON * root = cJSON_Parse(jsonData);//將json轉化為cjson格式的結構體 if (root == NULL)//解析錯誤 { printf("Parsing Error:%s\n", cJSON_GetErrorPtr()); return; } data->id = cJSON_GetObjectItem(root, "id")->valueint; sprintf(data->name,"%s", cJSON_GetObjectItem(root, "name")->valuestring); data->age = cJSON_GetObjectItem(root, "age")->valueint; data->height = cJSON_GetObjectItem(root, "height")->valuedouble; cJSON_Delete(root);//釋放內存
上述代碼示例中,首先使用cJSON_Parse函數將jsonData轉化為cjson格式的結構體,然后通過cJSON_GetObjectItem函數獲取json對應的值,轉化為實體類的屬性值,最后使用cJSON_Delete函數釋放內存。
當然,對于復雜的JSON數據,需要使用遞歸函數進行處理。比如下面這個示例中,JSON數據中包含數組。
cJSON *root=cJSON_Parse(data); if (!root) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return -1; } cJSON * arrayItem = cJSON_GetObjectItem(root,"array"); if (arrayItem == NULL) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return; } int i; int arraySize=cJSON_GetArraySize(arrayItem); for(i = 0; i< arraySize; i++) { CProduct* product = new CProduct(); cJSON *arrayItemArray = cJSON_GetArrayItem(arrayItem, i);//遍歷數組 if (arrayItemArray == NULL) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return; } product->id = cJSON_GetObjectItem(arrayItemArray, "id")->valueint; sprintf(product->name,"%s",cJSON_GetObjectItem(arrayItemArray, "name")->valuestring); product->price = cJSON_GetObjectItem(arrayItemArray, "price")->valuedouble; m_productList.push_back(product);//將對象添加到列表中 } cJSON_Delete(root);//釋放內存
在使用遞歸函數時,需要注意內存泄漏問題,盡量及時釋放內存。
總之,使用C語言將JSON轉為實體類需使用JSON解析庫,處理復雜情況時需要遞歸函數,注意內存泄漏問題。
上一篇vue cli文件