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

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}}
  ]
}
  1. 读取单个元素的price.value
    如果只需要数组第一个元素的价格值,直接用数组下标访问:
double first_price = json["offers"][0]["price"]["value"];
  1. 遍历整个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:05:22