答案:使用libcurl发送HTTP请求获取OpenWeatherMap API数据,结合nlohmann/json解析JSON响应,实现C++天气查询程序,需处理API密钥、网络错误及JSON字段存在性判断。

实现一个C++天气查询程序,关键在于调用网络API获取数据并解析返回的JSON内容。下面介绍如何使用HTTP请求获取天气信息,并用C++解析JSON响应。
选择天气API服务
常用的免费天气API有:
- OpenWeatherMap:提供实时天气、预报等,需注册获取API密钥
- WeatherAPI:功能丰富,支持JSON格式返回
以OpenWeatherMap为例,查询城市天气的URL格式为:
http://api.openweathermap.org/data/2.5/weather?q=城市名&appid=你的API密钥&units=metric&lang=zh_cn发送HTTP GET请求
C++标准库不直接支持网络操作,需借助第三方库。推荐使用libcurl发送HTTP请求。
立即学习“C++免费学习笔记(深入)”;
安装libcurl(Linux):
sudo apt-get install libcurl4-openssl-dev示例代码片段:
本书以培养高级网站建设与管理人才为目标,内容循序渐进,由浅入深,通过大量的实例系统全面地介绍了Linux+PHP+MySQL环境下的网络后台开发技术。本书详尽分析了近30个典型案例。包括计数器、网站流量统计、留言板、论坛系统、聊天室、投票与调查、用户管理、新闻发布系统、广告轮播、购物系统等等,力求让读者通过对案例的学习,轻松掌握PHP和MySQL的编程精要,迅速掌握网络后台开发技巧。 本书适
#include
static size_t WriteCallback(void contents, size_t size, size_t nmemb, std::string s) {
s->append((char)contents, size nmemb);
return size * nmemb;
}
std::string httpGet(const std::string& url) {
CURL* curl = curl_easy_init();
std::string response;
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return response;
}
解析JSON响应
C++没有内置JSON解析器,推荐使用轻量级库nlohmann/json。
添加头文件方式使用:
#include json.hpp>using json = nlohmann::json;
解析天气数据示例:
std::string data = httpGet("http://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=xxx&units=metric");json j = json::parse(data);
if (j.contains("main")) {
double temp = j["main"]["temp"];
int humidity = j["main"]["humidity"];
std::cout
std::cout
}
if (j.contains("weather")) {
std::string desc = j["weather"][0]["description"];
std::cout
}
完整流程与注意事项
程序基本流程:
- 用户输入城市名称
- 拼接API请求URL
- 调用httpGet获取响应
- 解析JSON并输出关键天气信息
注意点:
- 检查网络连接和API密钥有效性
- 处理API返回错误(如城市不存在)
- 对JSON字段做存在性判断,避免崩溃
- 中文城市名建议URL编码
基本上就这些。配合libcurl和nlohmann/json,C++也能方便地实现网络数据获取与解析。









