{"title":"C++ JSON 字符串转换为结构体对象:模板实现与示例","description":"本文展示了使用 C++ 模板实现将 JSON 字符串转换为结构体对象的通用方法,并提供了一个示例程序,演示如何使用第三方库 nlohmann/json 解析 JSON 字符串并将其转换为自定义结构体。","keywords":"C++, JSON, 解析, 结构体, 模板, nlohmann/json, 字符串转换, 序列化, 反序列化","content":""#include \n#include \n#include \n#include <json.hpp>\n\nusing json = nlohmann::json;\n\nstruct Person {\n std::string name;\n int age;\n std::vectorstd::string hobbies;\n};\n\ntemplate\nT fromJson(const std::string& jsonString) {\n return json::parse(jsonString).get();\n}\n\ntemplate<>\nPerson fromJson(const std::string& jsonString) {\n Person person;\n auto jsonObj = json::parse(jsonString);\n person.name = jsonObj["name"];\n person.age = jsonObj["age"];\n person.hobbies = jsonObj["hobbies"].get<std::vectorstd::string>();\n return person;\n}\n\ntemplate\nstd::string toJson(const T& obj) {\n return json(obj).dump();\n}\n\nint main() {\n std::string jsonString = R"(\n {\n "name": "Alice",\n "age": 25,\n "hobbies": ["reading", "painting"]\n }\n )";\n\n Person person = fromJson(jsonString);\n\n std::cout << "Name: " << person.name << std::endl;\n std::cout << "Age: " << person.age << std::endl;\n std::cout << "Hobbies: ";\n for (const auto& hobby : person.hobbies) {\n std::cout << hobby << " ";\n }\n std::cout << std::endl;\n\n return 0;\n}\n"\n在这个示例程序中,我们定义了一个Person结构体,它有一个name字符串成员,一个age整数成员,和一个hobbies字符串向量成员。\n\n我们使用template<typename T> T fromJson(const std::string& jsonString)函数模板来将json字符串转换为结构体对象。对于Person类型,我们特化了该模板函数来进行特殊处理,解析json字符串中的各个字段并赋值给相应的结构体成员。\n\n我们也定义了template<typename T> std::string toJson(const T& obj)函数模板来将结构体对象转换为json字符串。\n\n在main函数中,我们使用示例的json字符串来解析为Person对象,并打印出其中的字段。"}


原文地址: https://www.cveoy.top/t/topic/pDXc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录