MALOUDA-PSA 2024-03-11 07:28 采纳率: 91%
浏览 1
已结题

Nlohamman中的from_json的问题



void from_json(const nlohmann::json& j, MenuItem& item) {
    j.at("name").get_to(item.name);
    j.at("children").get_to(item.children);
    // 如果从JSON反序列化时需要递归创建子菜单项,可以在这里进行递归调用from_json
    for (auto& childJson : j["children"]) {
        MenuItem childItem;
        childJson.get_to(childItem);  // 自动调用from_json
        item.children.push_back(childItem);
    }

这样编译不会报错,可是如果把函数名改为from_json1就会报错,报错行在j.at("children").get_to(item.children);

  • 写回答

3条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-03-11 07:28
    关注

    MALOUDA-PSA 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    报错的原因是函数名改为from_json1后,编译器无法找到相关的函数定义。从报错的位置来看,问题出在了获取"children"字段的代码上,这里调用了j.at("children").get_to(item.children)。

    为了解决这个问题,可以尝试以下几种方式:

    1. 修改函数名为from_json1的函数定义,使其与调用处保持一致。跟进报错信息,找到调用from_json1的地方,并将函数名改为from_json。

    2. 添加from_json1的函数定义。可以在代码中添加一个新的from_json1函数,用于处理特殊情况。在这个新函数中,你可以自定义一个递归的实现来处理创建子菜单项的需求。

    以下是给出的一种修改代码的示例,来处理from_json1的情况:

    void from_json1(const nlohmann::json& j, MenuItem& item) {
        j.at("name").get_to(item.name);
        for (auto& childJson : j["children"]) {
            MenuItem childItem;
            from_json1(childJson, childItem);  // 递归调用from_json1
            item.children.push_back(childItem);
        }
    }
    
    void from_json(const nlohmann::json& j, MenuItem& item) {
        j.at("name").get_to(item.name);
        j.at("children").get_to(item.children);
        for (auto& childJson : j["children"]) {
            MenuItem childItem;
            from_json(childJson, childItem);  // 自动调用from_json
            item.children.push_back(childItem);
        }
    }
    

    从上面的示例中可以看到,我们添加了一个新的from_json1函数并在其中进行了递归调用。这样,在递归创建子菜单项时,我们可以选择调用哪个函数来进行反序列化操作。

    所以,根据具体的需求,你可以根据上述解决方案来处理函数名改为from_json1的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 创建了问题 3月11日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效