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

如何在RapidJSON中对用户输入的字符串使用GetString()方法?

实现命令行动态输入JSON对象名称并取值

我来帮你搞定这个动态取值的需求,结合你用的RapidJSON代码,咱们可以通过以下步骤实现:

核心思路

不再硬编码JSON对象的键名,而是从命令行读取用户输入的对象名称,用这个名称作为动态键去访问JSON结构,同时增加错误处理避免访问不存在的对象导致程序崩溃。

具体实现步骤

  • 读取用户输入:由于对象名称可能包含空格(比如你的示例里的"Rogue Refiner"),要用getline来读取完整输入,避免被空格截断。
  • 动态访问JSON对象:将用户输入的字符串作为键,替代原来硬编码的"Rogue Refiner",去访问JSON中的对应对象。
  • 错误校验:先检查用户输入的对象是否存在于JSON中,且是一个合法的对象类型,再去获取字段值。

完整代码示例

#include <iostream>
#include <string>
#include "rapidjson/document.h"

using namespace rapidjson;

int main() {
    // 模拟包含大量对象的JSON数据(这里包含你的示例对象)
    const std::string data = R"(
    {
        "Rogue Refiner": { "name": "Rogue Refiner", "power": "3", "toughness": "2" },
        "Goblin Raider": { "name": "Goblin Raider", "power": "2", "toughness": "1" },
        "Elvish Archer": { "name": "Elvish Archer", "power": "1", "toughness": "1" }
    }
    )";

    // 解析JSON
    Document d;
    d.Parse(data.c_str());
    if (d.HasParseError()) {
        std::cerr << "JSON解析失败!错误码:" << d.GetParseError() << std::endl;
        return 1;
    }

    // 提示用户输入对象名称
    std::cout << "请输入要查询的JSON对象名称:";
    std::string objName;
    std::getline(std::cin, objName);

    // 检查对象是否存在且为合法对象
    if (d.HasMember(objName.c_str()) && d[objName.c_str()].IsObject()) {
        const Value& obj = d[objName.c_str()];
        // 获取name字段的字符串值(同样可以扩展获取power、toughness等)
        if (obj.HasMember("name") && obj["name"].IsString()) {
            std::cout << "对应对象的name值为:" << obj["name"].GetString() << std::endl;
        } else {
            std::cerr << "该对象不包含合法的name字段!" << std::endl;
        }
    } else {
        std::cerr << "未找到名称为\"" << objName << "\"的JSON对象!" << std::endl;
    }

    return 0;
}

关键细节说明

  • 处理带空格的输入:用std::getline(std::cin, objName)而不是std::cin >> objName,因为后者遇到空格就会停止读取,无法获取完整的对象名称。
  • 安全访问JSON:每次访问前用HasMember检查键是否存在,用IsObject/IsString检查值的类型,避免因JSON结构不符合预期导致程序崩溃。
  • RapidJSON的字符串处理:RapidJSON的HasMember和下标运算符接受const char*类型的键,所以需要把std::string转成c_str()。

内容的提问来源于stack exchange,提问作者Terren Huck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:54:17