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

如何在C++中使用RapidJSON访问JSON数组字段

如何用RapidJSON访问JSON数组中的特定元素

嘿,作为RapidJSON新手,你已经走对路子啦!我来帮你补全循环里的逻辑,轻松获取数组元素的各个字段值。

首先,先回顾下你的示例JSON结构:

{ 
  "products": [ 
    { "id_product": 1, "product_name": "Beer", "product_price": 120.00 }, 
    { "id_product": 2, "product_name": "Pizza", "product_price": 20.00 } 
  ] 
}

你的现有代码已经正确定位到了products数组,接下来在循环里,每个数组元素a[i]都是一个JSON对象(Object),我们可以通过以下步骤获取它的字段:

完整的循环实现代码

for (SizeType i = 0; i < a.Size(); i++) {
    // 先拿到当前数组中的产品对象
    const Value& product = a[i];
    // 确保当前元素是Object类型(健壮性检查)
    if (!product.IsObject()) {
        continue; // 跳过非对象元素
    }

    // 获取id_product(整数类型)
    int element_id = 0;
    if (product.HasMember("id_product") && product["id_product"].IsInt()) {
        element_id = product["id_product"].GetInt();
    }

    // 获取product_name(字符串类型)
    std::string element_name;
    if (product.HasMember("product_name") && product["product_name"].IsString()) {
        element_name = product["product_name"].GetString();
    }

    // 获取product_price(浮点数类型,RapidJSON默认用double存储)
    float element_price = 0.0f;
    if (product.HasMember("product_price") && product["product_price"].IsNumber()) {
        // 可以用GetFloat()或GetDouble(),根据你的需求选择
        element_price = static_cast<float>(product["product_price"].GetDouble());
    }

    // 这里就可以使用拿到的三个值啦
    // 比如打印测试:
    std::cout << "ID: " << element_id << ", Name: " << element_name << ", Price: " << element_price << std::endl;
}

关键要点说明

  • 类型检查很重要:在获取字段前,一定要用HasMember()检查字段是否存在,再用IsInt()/IsString()/IsNumber()确认类型,避免程序崩溃。
  • RapidJSON的类型转换:
    • 整数字段用GetInt()获取
    • 字符串字段用GetString()获取,返回const char*,可以直接赋值给std::string
    • 浮点数字段默认存储为double,所以用GetDouble()获取后,再转成float(如果需要的话)
  • 数组元素访问:a[i]直接访问数组的第i个元素,注意SizeType是RapidJSON定义的无符号整数类型,和循环变量类型保持一致。

这样你就能轻松遍历products数组,获取每个产品的ID、名称和价格啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:03:39