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

如何使用Boost正确修改JSON文件中的指定字段值?

修正Boost Property Tree修改JSON字段的问题

原问题场景

现有JSON文件:

{
    ....
    ....
    "frequency_ask": 900
}

需要将frequency_ask字段值修改为1200,但编写的函数无法正常工作,原代码如下:

原函数代码:

void setFieldToJson(std::string json, std::string field, int value)
{
    boost::property_tree::ptree pt;
    pt.put(field, value);
    std::ostringstream json;

    boost::property_tree::write_json(json, pt);
}

调用语句:

setFieldToJson("../config_files/device.json", "frequency_ask", 1200);

原代码的问题

  1. 未读取原JSON文件:直接创建空的ptree并添加字段,相当于生成全新的仅含目标字段的JSON,完全忽略了原文件的其他内容
  2. 变量名冲突:函数内部定义的std::ostringstream json和参数std::string json重名,会导致编译错误
  3. 未写回原文件:仅将数据写入内存流,没有把修改后的内容保存到原JSON文件中

修正后的代码

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <sstream>
#include <string>

void setFieldToJson(const std::string& file_path, const std::string& field, int value)
{
    // 1. 读取原JSON文件到property tree
    boost::property_tree::ptree pt;
    try {
        boost::property_tree::read_json(file_path, pt);
    } catch (const boost::property_tree::json_parser_error& e) {
        // 处理文件读取错误,比如打印日志或抛出异常
        return;
    }

    // 2. 修改指定字段的值
    pt.put(field, value);

    // 3. 将修改后的内容写回原文件
    try {
        boost::property_tree::write_json(file_path, pt);
    } catch (const boost::property_tree::json_parser_error& e) {
        // 处理文件写入错误
        return;
    }
}

调用方式保持不变:

setFieldToJson("../config_files/device.json", "frequency_ask", 1200);

说明

  • 增加了异常捕获,处理文件读写可能出现的错误(比如文件不存在、权限不足等)
  • 将参数名改为file_path避免和内部变量冲突
  • 完整实现了"读原文件→修改字段→写回文件"的流程,确保原JSON的其他字段不会丢失

内容的提问来源于stack exchange,提问作者metcenger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:36:18