如何在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
相关产品推荐
相关产品推荐

