#include #include #include #include using NJsonNode = nlohmann::json; /// ============================================================================================= /// 使用说明: /// 创建 ------------- // json j; // j["name"] = "Alice"; // j["age"] = 25; // j["address"] = {{"city", "Beijing"}, {"country", "China"}}; /// 字符串解析 ------------- // json::parse(R"({"name": "Alice", "age": 25})"); // 说明:解析失败会抛出异常 // try { // auto j = json::parse("invalid json"); // } // catch (json::parse_error& e) { // std::cerr << "JSON 解析错误: " << e.what() << std::endl; // } /// 文件解析 ------------- // std::ifstream file("data.json"); // json j; // file >> j; /// 访问 JSON 数据 ------------- // std::string name = j["name"]; // 直接访问 // int age = j.at("age"); // 使用 at() 检查 key 是否存在 // auto address = j["address"]; // 获取数组 /// 序列化为字符串 ------------- // std::string json_str = j.dump(4); // 4 表示缩进,美化输出 /// 数组解析 ------------- // json jArray = json::array() // jArray.push_back(1); // jArray.push_back(2); // json j; // j["data"] = {1,2,3,4,5}; // std::vector v1; // v1 = j.at["data"].get>() class NJson { public: static bool load(std::string jsonfile, NJsonNode& json) { std::ifstream ifs(jsonfile); if (ifs.is_open()) { ifs >> json; return true; } return false; } static bool parse(std::string jsonstr, NJsonNode& json) { try { json = NJsonNode::parse(jsonstr); } catch (nlohmann::json::parse_error& e) { std::cout << "JSON parse error: " << e.what() << std::endl; return false; } return true; } static bool contains(NJsonNode& json, std::string key) { return json.contains("database"); } template static void read(NJsonNode& json, std::string k, T& v) { try { if (json.contains(k)) { v = json.at(k).get(); } } catch (const nlohmann::detail::exception& e) { std::cout << "JSON read error: " << e.what() << std::endl; } } };