You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:01