使用nlohmann/json库判断并新增JSON组件和参数的实现问题
实现逻辑说明
userParameters是数组结构,每个子元素包含component(组件名称)和parameters(该组件下的参数数组)两个字段- 第一步遍历
userParameters数组,匹配目标组件名称是否存在 - 组件存在的场景下,再遍历对应组件的
parameters数组,匹配参数名是否存在,不存在则新增参数 - 组件不存在的场景下,直接新增包含当前组件和参数的完整结构到
userParameters数组
补全后完整代码
#include <nlohmann/json.hpp> #include <algorithm> // std::find_if依赖该头文件 using json = nlohmann::json; // 此处保留你原有上层逻辑 json jresult; jresult["userParameters"] = json::array(); // 显式初始化为空数组,避免类型不匹配异常 auto& user_params = jresult["userParameters"]; std::string target_component = component_names[i]; std::string target_param_name = userParam->name(); // 查找对应组件是否存在 auto comp_iter = std::find_if(user_params.begin(), user_params.end(), [&](const json& item) { return item["component"].get<std::string>() == target_component; }); if (comp_iter != user_params.end()) { // 组件已存在,检查参数是否存在 auto& param_list = (*comp_iter)["parameters"]; auto param_iter = std::find_if(param_list.begin(), param_list.end(), [&](const json& param) { return param["name"].get<std::string>() == target_param_name; }); // 参数不存在则新增 if (param_iter == param_list.end()) { param_list.push_back( { {"name", userParam->name()}, {"expression", userParam->expression()}, {"comment", userParam->comment()}, }); } } else { jresult["userParameters"].push_back( { { "component", component_names[i] }, { "parameters", { {"name", userParam->name()}, {"expression", userParam->expression()}, {"comment", userParam->comment()}, }} }); }
注意事项
- 字段取值时显式调用
get<std::string>(),可避免隐式类型转换引发的异常 - 如果业务场景允许同组件下存在同名参数,可去掉参数校验逻辑直接执行push_back操作
内容的提问来源于stack exchange,提问作者genibec746
相关产品推荐
相关产品推荐

