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

解析JSON文件存子字段到二维数组时遇‘sample未定义’错误求助

解决"sample is undefined"错误及完成JSON解析需求

你遇到的sample is undefined错误原因很直接——代码里用到的sample变量根本没定义。它是Boost.JSON用来存储解析后JSON数据的boost::json::value类型对象,必须先把输入的JSON文本解析成这个对象才能使用。

另外注意你的需求是将media的键值对存入二维数组,但原代码用了std::map,如果确实需要二维数组(每个元素是包含键和值的子数组),可以参考以下完整修正代码:

#include <boost/json.hpp>
#include <boost/json/src.hpp> // 头文件模式下必须包含,若链接库则可省略
#include <vector>
#include <string>
#include <map>

int main() {
    // 定义要解析的JSON文本
    const std::string json_content = R"({
        "media": {
            "Test1": "https://storage.tst",
            "Test2": "https://storage.tst"
        }
    })";

    // 解析JSON文本,得到缺失的sample对象
    boost::json::value sample = boost::json::parse(json_content);

    // 需求中的二维数组:每个元素是[key, value]的字符串数组
    std::vector<std::vector<std::string>> media_2d_array;

    // 遍历media对象的键值对
    for (auto& kvp : sample.at("media").as_object()) {
        // 将键和值存入二维数组
        media_2d_array.push_back({
            std::string(kvp.key()), // 转换键为std::string
            std::string(kvp.value().as_string()) // 转换值为std::string
        });
    }

    // 如果仍需要用map存储,保留原逻辑即可(已补上sample定义)
    std::map<std::string, std::string> media_map;
    for (auto& kvp : sample.at("media").as_object()) {
        media_map.emplace(kvp.key(), kvp.value().as_string());
    }

    return 0;
}

关键说明:

  • boost::json::parse是核心解析函数,负责把JSON字符串转换成boost::json::value类型的sample对象,这是你原代码缺失的关键步骤。
  • sample.at("media")用于安全获取media节点,as_object()将其转换为可遍历的键值对集合。
  • 由于Boost.JSON的键是string_view类型、值是boost::json::string类型,需要显式转换为std::string才能存入标准容器。
  • 若使用链接库模式而非头文件模式,编译时需链接Boost.JSON库(例如Linux下添加-lboost_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.12 16:50:43