Разбор массива объектов с помощью RapidJSON - PullRequest
0 голосов
/ 27 марта 2020

Я сталкиваюсь с проблемой разбора файла JSON через Rapid JSON и загрузки его содержимого в атрибуты объектов, которые я создал в своей программе (карточная игра). Файл JSON содержит два типа карт - карты существ и карт заклинаний - каждому из которых назначены атрибуты.

bool loadConfig(std::string config_file){

    std::ifstream ifs(config_file);
    rapidjson::IStreamWrapper isw(ifs);
    rapidjson::Document file;
    file.ParseStream(isw);

    assert(file.IsObject());
    assert(file.HasMember("Creatures"));
    assert(file["Creatures"].IsString());
    printf("Name: %s\n", file["Creatures"].GetString());

    return true;
}

Функция, с которой я работаю, получает свою строку из аргумента командной строки. Я попытался с помощью IStreamwrapper получить быстрый JSON для начала синтаксического анализа, но я получаю сообщение об ошибке "Assertion file.IsObject () 'fail "`.

Это файл конфигурации, с которым я работаю .

{
  "Creatures" : [
    {
      "name": "Big Wall",
      "mana_cost": 7,
      "damage_points": 2,
      "life_points": 9,
      "shield": true,
      "mana_drain": false
    },
    {
      "name": "Werwolf",
      "mana_cost": 13,
      "damage_points": 9,
      "life_points": 6,
      "shield": false,
      "mana_drain": false
    }
  ],
  "Spells" : [
    {
      "name": "Healer"
    },
    {
      "name": "Relief"
    },
    {
      "name": "Rebirth"
    },
    {
      "name": "Dracula"
    }
  ]
}
...