Dev C++下用nlohmann库读取JSON数组中price的value值报错求助
解决nlohmann/json读取数组内字段的错误问题
你碰到的错误原因很明确:offers是数组类型,不是键值对对象,所以不能用["price"]这种字符串索引直接访问。必须先通过数组下标(比如[0]取第一个元素)拿到数组里的单个对象,再访问对象内的price和value字段。
正确访问方式
假设你的JSON结构类似这样:
{ "request_info": {"credits_remaining": 50}, "request_parameters": {"asin": "B012345678"}, "offers": [ {"price": {"value": 29.99}}, {"price": {"value": 27.99}} ] }
- 读取单个元素的price.value
如果只需要数组第一个元素的价格值,直接用数组下标访问:
double first_price = json["offers"][0]["price"]["value"];
- 遍历整个offers数组读取所有price.value
如果要处理数组里的每一个offer,用循环遍历:
#include <iostream> #include "nlohmann/json.hpp" using json = nlohmann::json; int main() { // 假设已完成JSON文件解析,json是解析后的对象 if (json.contains("offers") && json["offers"].is_array()) { for (const auto& offer : json["offers"]) { // 先检查字段是否存在,避免触发异常 if (offer.contains("price") && offer["price"].contains("value")) { double price_val = offer["price"]["value"]; std::cout << "当前offer价格:" << price_val << std::endl; } else { std::cout << "当前offer缺少price或value字段" << std::endl; } } } else { std::cout << "JSON中不存在offers数组" << std::endl; } return 0; }
额外建议
为避免因JSON结构变化触发异常,建议每次访问字段前做存在性检查:
- 用
contains(key)判断字段是否存在 - 用
is_array()/is_object()判断数据类型 - 或者用
value()方法提供默认值,比如:
// 如果offers不存在或不是数组返回空数组;price/value不存在则返回0.0 double default_price = json.value("offers", json::array()) .value(0, json::object()) .value("price", json::object()) .value("value", 0.0);
内容的提问来源于stack exchange,提问作者TheOwnIt
相关产品推荐
相关产品推荐

