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

如何用Boost.JSON将input.json中Identifier2的metrics转为二维int向量

解决Boost JSON读取指定字段并转换为二维vector的问题

原代码的核心问题

  1. 读取文件方式错误:value_from("input.json")是将C++对象序列化为JSON值的接口,并非读取文件的方法。需要先读取文件内容,再用boost::json::parse解析成JSON对象。
  2. 未定位目标字段:直接对整个JSON根对象使用value_to,无法匹配到Identifier2下的metrics字段,必须逐层访问目标节点。

修正后的完整代码

#include <boost/json.hpp>
#include <vector>
#include <fstream>
#include <string>
#include <iostream>

using namespace boost::json;

int main() {
    // 1. 读取JSON文件内容到字符串
    std::ifstream ifs("input.json");
    std::string json_str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
    
    // 2. 解析字符串为JSON value对象
    value jv = parse(json_str);
    
    // 3. 逐层定位到Identifier2下的metrics数组
    array const& metrics_json = jv.as_object()["Identifier2"].as_object()["metrics"].as_array();
    
    // 4. 将JSON数组转换为std::vector<std::vector<int>>
    std::vector<std::vector<int>> metrics = value_to<std::vector<std::vector<int>>>(metrics_json);
    
    // 验证转换结果(可选)
    for (auto const& row : metrics) {
        for (int num : row) {
            std::cout << num << " ";
        }
        std::cout << "\n";
    }
    
    return 0;
}

关键步骤说明

  • 文件读取:通过std::ifstream将文件内容读取到字符串,这是JSON解析的前置步骤。
  • JSON解析:parse函数负责将字符串格式的JSON转换为boost::json::value对象,后续可通过类型转换方法访问内部节点。
  • 字段定位:
    • jv.as_object():将根JSON值转换为对象(因为输入的JSON根结构是对象)。
    • ["Identifier2"]:通过键名获取对应的子对象。
    • ["metrics"].as_array():获取metrics对应的JSON数组节点。
  • 类型转换:Boost JSON原生支持将JSON数组转换为std::vector这类标准容器,value_to<T>会自动完成嵌套数组到二维vector的转换。

安全访问的补充方案

如果不确定目标字段是否存在,可使用object::find避免键不存在导致的异常:

auto const& root_obj = jv.as_object();
auto id2_it = root_obj.find("Identifier2");
if (id2_it != root_obj.end()) {
    auto const& id2_obj = id2_it->value().as_object();
    auto metrics_it = id2_obj.find("metrics");
    if (metrics_it != id2_obj.end()) {
        std::vector<std::vector<int>> metrics = value_to<std::vector<std::vector<int>>>(metrics_it->value());
        // 后续业务处理
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:01:27