Невозможно использовать оператор [] со строковым аргументом с массивом (анализ json)C++

Программы на C++. Форум разработчиков
Anonymous
Невозможно использовать оператор [] со строковым аргументом с массивом (анализ json)

Сообщение Anonymous »

Я решил написать tg-бот для прогноза погоды на c++, и когда мне нужно разобрать строку в json, всегда выдает ошибки (с цифрами работает), много гуглил и ничего не нашел. Помогите пожалуйста, я просто не усну, если не пойму где накосячил.
Библиотека json - nlohmann/json (https://github.com/nlohmann/json)
tg api — tgbot-cpp(https://github.com/reo7sp/tgbot-cpp)
Ссылка на json — https://api .openweathermap.org/data/2.5/weather?q=London&appid=2e71c3ca54737820fc305ba048331b8c (ключ API бесплатен).
парсер
std::string get_weather(std::string where) {
nlohmann::json js_obj = nlohmann::json::parse(get_request("https://api.openweathermap.org/data/2.5 ... a048331b8c"));
if(where == "London") {
return js_obj["weather"]["0"]["main"].get();;
}
}

и когда я вызываю этот метод для анализа строки, возникает ошибка.
bot.getApi().sendMessage(query1->message->chat->id, "Weather: " + get_weather("London"));

terminate called after throwing an instance of 'nlohmann::json_abi_v3_11_3::detail::type_error'
what(): [json.exception.type_error.305] cannot use operator[] with a string argument with array

но с цифрами всё работает
float get_temperature(std::string where) {
auto js_obj = nlohmann::json::parse(get_request("https://api.openweathermap.org/data/2.5 ... a048331b8c"));
if(where == "London") {
return js_obj["main"]["temp"].get();
}
}

bot.getApi().sendMessage(query1->message->chat->id, "Temperature in your area: "
+ std::to_string (get_temperature("London") - 273.15));


Подробнее здесь: https://stackoverflow.com/questions/786 ... rsing-json

Вернуться в «C++»