json和protobuf都是數據序列化的方式,其中json更加人類友好的語言,而protobuf則更加高效、緊湊和快速。C語言作為一種廣泛使用的編程語言,能夠輕松地處理這兩種格式的數據。本文將介紹如何將C語言中的json數據轉換為protobuf數據。
//定義一個json數據 const char* json_data = "{ \"name\": \"tom\", \"age\": 25, \"address\": { \"city\": \"New York\", \"zipcode\": 10010 } }"; //定義protobuf的數據結構 typedef struct { char name[20]; int age; char address[50]; } Person; //將json數據轉成protobuf數據 Person person; json_object* jobj = json_tokener_parse(json_data); json_object_object_foreach(jobj, key, val) { if (strcmp(key, "name") == 0) { strcpy(person.name, json_object_get_string(val)); } else if (strcmp(key, "age") == 0) { person.age = json_object_get_int(val); } else if (strcmp(key, "address") == 0) { json_object* address = json_object_object_get(jobj, key); json_object_object_foreach(address, k, v) { if (strcmp(k, "city") == 0) { strcat(person.address, json_object_get_string(v)); strcat(person.address, ", "); } else if (strcmp(k, "zipcode") == 0) { char zipcode[10]; sprintf(zipcode, "%d", json_object_get_int(v)); strcat(person.address, zipcode); } } } }
上述C代碼將json對象解析為protobuf中的Person結構體。我們通過json_tokener_parse()將JSON數據結構化,然后遍歷每個鍵值對,將相應的值賦給Person結構體的成員。需要注意的是,我們需要分別處理字符串類型和數值類型。對于Person結構體中的嵌套結構體,我們可以使用相同的方法遞歸解析。
總之,C語言可以通過簡單的代碼將JSON數據轉換為protobuf數據。這種轉換為在數據傳輸、存儲和操作上都具有重要作用,這是值得開發者深入研究的技術。
上一篇python 數組轉網絡
下一篇c json讀取數組內容