解析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
相关产品推荐
相关产品推荐

