初出茅庐的小李博客之CJSON库解析心知天气数据

news2024/11/9 10:24:00

心知天气数据JSON格式介绍

JSON格式介绍http://t.csdnimg.cn/pJX1n

下面代码是利用CJSON库进行数据解析

解析代码

#include <stdio.h>
#include <string.h>
#include "cJSON.h" // 假设你的CJSON库头文件路径是正确的

int main(void) 
{
    // 提供的JSON数据
    const char *json_data = "{\"results\":[{\"location\":{\"id\":\"WS10730EM8EV\",\"name\":\"深圳\",\"country\":\"CN\",\"path\":\"深圳,深圳,广东,中国\",\"timezone\":\"Asia/Shanghai\",\"timezone_offset\":\"+08:00\"},\"now\":{\"text\":\"阴\",\"code\":\"9\",\"temperature\":\"27\"},\"last_update\":\"2024-06-11T22:00:15+08:00\"}]}";

    // 解析JSON数据
    cJSON *root = cJSON_Parse(json_data);
    if (root == NULL) 
	{
		printf("\r\n===================================================\r\n");
        printf("\r\njson_data是非法的JSON数据\r\n");
        printf("\r\n===================================================\r\n");
        return 1;
    }
    else
    {
    	printf("\r\n===================================================\r\n");
    	printf("\r\njson_data是合法的JSON数据\r\n");
    	printf("\r\n===================================================\r\n");
	}
    // 检查JSON数据类型是否为对象
    if (!cJSON_IsObject(root)) 
	{
		printf("\r\n===================================================\r\n");
        printf("\r\nJSON数据 is not an 对象\r\n");
        printf("\r\n===================================================\r\n");
        cJSON_Delete(root);
        return 1;
    }
    else
    {
    	printf("\r\n===================================================\r\n");
    	printf("\r\nJSON数据 is  an 对象\r\n");
    	printf("\r\n===================================================\r\n");
	}

    // 获取 results 数组
    cJSON *results = cJSON_GetObjectItemCaseSensitive(root, "results");
    if (!cJSON_IsArray(results)) 
	{
		printf("\r\n===================================================\r\n");
        printf("\r\nResults数据 is not an 数组\r\n");
        printf("\r\n===================================================\r\n");
        cJSON_Delete(root);
        return 1;
    }
    else
	{
		printf("\r\n===================================================\r\n");
		printf("\r\nResults数据 is an 数组\r\n");
		printf("\r\n===================================================\r\n");
	} 
    // 解析 results 数组中的第一个对象
    cJSON *first_result = cJSON_GetArrayItem(results, 0);
    if (!cJSON_IsObject(first_result)) 
	{
		printf("\r\n===================================================\r\n");
        printf("\r\nFirst result数据 is not an 对象\r\n");
        printf("\r\n===================================================\r\n");
        cJSON_Delete(root);
        return 1;
    }
	else
	{
		printf("\r\n===================================================\r\n");
		printf("\r\nFirst result数据 is an 对象\r\n");
		printf("\r\n===================================================\r\n");
	}
    // 获取 location 对象
    cJSON *location = cJSON_GetObjectItemCaseSensitive(first_result, "location");
    if (!cJSON_IsObject(location)) 
	{
		printf("\r\n===================================================\r\n");
        printf("\r\nLocation 数据 is not an 对象\r\n");
        printf("\r\n===================================================\r\n");
        cJSON_Delete(root);
        return 1;
    }
    else
    {
    	printf("\r\n===================================================\r\n");
    	printf("\r\nLocation 数据 is  an 对象\r\n");
    	printf("\r\n===================================================\r\n");
	}

    // 获取 now 对象
    cJSON *now = cJSON_GetObjectItemCaseSensitive(first_result, "now");
    if (!cJSON_IsObject(now)) 
	{
		printf("\r\n===================================================\r\n");
        printf("\r\nNow 数据 is not an 对象\r\n");
        printf("\r\n===================================================\r\n");
        cJSON_Delete(root);
        return 1;
    }
    else
    {
    	printf("\r\n===================================================\r\n");
    	printf("\r\nNow 数据 is an 对象\r\n");
    	printf("\r\n===================================================\r\n");
	}

    // 获取 last_update 字符串
    cJSON *last_update = cJSON_GetObjectItemCaseSensitive(first_result, "last_update");
    if (!cJSON_IsString(last_update)) 
	{
		printf("\r\n===================================================\r\n");
        printf("\r\nLast update time is not a 字符串\r\n");
        printf("\r\n===================================================\r\n");
        cJSON_Delete(root);
        return 1;
    }
	else
	{
		printf("\r\n===================================================\r\n");
		printf("\r\nLast update time is a 字符串\r\n");
		printf("\r\n===================================================\r\n");
	}
	
    // 提取各个字段的数据
    const char *location_id              = cJSON_GetObjectItemCaseSensitive(location, "id")->valuestring;
    const char *location_name            = cJSON_GetObjectItemCaseSensitive(location, "name")->valuestring;
    const char *location_country         = cJSON_GetObjectItemCaseSensitive(location, "country")->valuestring;
    const char *location_path            = cJSON_GetObjectItemCaseSensitive(location, "path")->valuestring;
    const char *location_timezone        = cJSON_GetObjectItemCaseSensitive(location, "timezone")->valuestring;
    const char *location_timezone_offset = cJSON_GetObjectItemCaseSensitive(location, "timezone_offset")->valuestring;
    const char *now_text                 = cJSON_GetObjectItemCaseSensitive(now, "text")->valuestring;
    const char *now_code                 = cJSON_GetObjectItemCaseSensitive(now, "code")->valuestring;
    const char *now_temperature          = cJSON_GetObjectItemCaseSensitive(now, "temperature")->valuestring;
    const char *last_update_time         = cJSON_GetStringValue(last_update);

    printf("===================================================\r\n");
    // 打印解析结果
    printf("地点ID:   %s\r\n", location_id);
    printf("地点名字: %s\r\n", location_name);
    printf("所在国家: %s\r\n", location_country);
    printf("地点信息: %s\r\n", location_path);
    printf("时区信息: %s\r\n", location_timezone);
    printf("时区偏移: %s\r\n", location_timezone_offset);

    printf("天气状况: %s\r\n", now_text);
    printf("天气代码: %s\r\n", now_code);
    printf("温度信息: %s 摄氏度\r\n", now_temperature);

    printf("更新时间: %s\r\n", last_update_time);
    printf("===================================================\r\n");
    printf("===================================================\r\n");
    // 释放资源
    cJSON_Delete(root);

    return 0;
}

解析结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1813349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微软如何打造数字零售力航母系列科普13 - Prime Focus Technologies在NAB 2024上推出CLEAR®对话人工智能联合试点

Prime Focus Technologies在NAB 2024上推出CLEAR对话人工智能联合试点 彻底改变您与内容的互动方式&#xff0c;从内容的创建到分发 洛杉矶&#xff0c;2024年4月9日/PRNewswire/-媒体和娱乐&#xff08;M&E&#xff09;行业人工智能技术解决方案的先驱Prime Focus Techn…

23种设计模式之代理模式

代理模式 1、概念 代理模式&#xff1a;给某一个对象提供一个代理或占位符&#xff0c;并由代理对象来控制对原对象的访问 代理模式是常用的结构型设计模式之一&#xff0c;在Java RMI、Web Service、Spring AOP等技术和框架中都使用了代理模式 2、代理模式结构 Subject&a…

[工具探索]英寸vs毫米下常见尺寸排版

文章目录 常见尺寸1. 照片尺寸2. 纸张尺寸3. 显示器和电视屏幕尺寸4. 手机屏幕尺寸5. 笔记本电脑屏幕尺寸6. 其他设备尺寸 换算公式换算方法常见照片尺寸对比表国际标准ISO&#xff08;216&#xff09;纸张尺寸 什么是英寸&#xff1f; 英寸&#xff08;英语&#xff1a;inch&a…

R语言统计分析——图形参数

参考资料&#xff1a;R语言实战【第2版】 我们可以通过修改图形参数来自定义一幅图形的多个特征&#xff08;字体、颜色、坐标轴、标签&#xff09;。一种方法是通过函数par()来指定这些参数&#xff0c;以这种方式设定的参数除非被再次修改&#xff0c;否则将会在会话结束前一…

webshell三巨头 综合分析(蚁剑,冰蝎,哥斯拉)

考点: 蚁剑,冰蝎,哥斯拉流量解密 存在3个shell 过滤器 http.request.full_uri contains "shell1.php" or http.response_for.uri contains "shell1.php" POST请求存在明文传输 ant 一般蚁剑执行命令 用垃圾字符在最开头填充 去掉垃圾字符直到可以正常bas…

网页五子棋对战项目测试(selenium+Junit5)

目录 网页五子棋对战项目介绍 网页五子棋对战测试的思维导图​ 网页五子棋对战的UI自动化测试 测试一&#xff1a;测试注册界面 测试二&#xff1a;测试登陆界面 测试三&#xff1a;测试游戏大厅界面 测试四&#xff1a;测试游戏房间界面以及观战房间界面 测试五&#…

对yoloV8进行标签过滤来实现行人检测

前言 上一章我们介绍的通过迁移学习&#xff0c;在新的行人数据集上使用已经学习到的特征和权重&#xff0c;从而更快地实现行人检测任务。模型就会调整其参数以适应新的数据集&#xff0c;以提高对行人的识别性能。接下来介绍一种更快更便捷的方法&#xff0c;依旧是基于yolo…

探寻性能优化:如何衡量?如何决策?

目录 一、衡量指标说明 &#xff08;一&#xff09;响应时间&#xff08;Response Time&#xff09; 平均响应时间&#xff08;Average Response Time&#xff09; 百分位数响应时间&#xff08;Percentile Response Time&#xff09; &#xff08;二&#xff09;吞吐量&a…

bugku--web---baby lfi

1、题目描述 2、页面提示使用language参数 3、构造url:/?languagefr。页面有回显 4、这里提示包含关键的文件 5、构造url:/?language/etc/passwd 6、flag shellmates{10CA1_F11e_1Nc1US10n_m4y_r3ve4l_in7Er3st1nG_iNf0Rm4t1on}

2024.6.11

思维导图 代码 #include <iostream>using namespace std;//封装一个 讲解员 类 class Animal { public:Animal(){}virtual void perform(){cout << " " << endl;} };//封装一个 狮子 类 class Lion:public Animal { public:Lion(){}void pe…

BT音频方案

一、缩写 缩写 全程 释义 I2S I2S 音频传输接口总线 PCM Pulse-Code Modulation 基础音频数据或翻译为音频接口总线 HFP Handsfree 蓝牙通话协议 A2DP Advanced Audio Distribution Profile 蓝牙媒体音频协议 二、音频流转策略 蓝牙音频功能分为通话声音和媒体…

【Java】 如何设计RPC框架在10万QPS下实现毫秒级的服务调用?

一、问题解析 来思考这样一个场景&#xff1a;你的垂直电商系统的 QPS 已经达到了每秒 2 万次&#xff0c;在做了服务化拆分之后&#xff0c;由于我们把业务逻辑都拆分到了单独部署的服务中&#xff0c;那么假设你在完成一次完整的请求时需要调用 4&#xff5e;5 次服务&#…

温泉镇旅游微信小程序的设计与实现(论文+源码)_kaic

摘要 旅游业随着经济的快速发展呈现出一派欣欣向荣的景象&#xff0c;尤其是近两年来&#xff0c;各个行业运用科技以及因特网来促进旅游迅速发展&#xff0c;逐渐都显示出了的问题&#xff0c;特别突出的是在线上推广&#xff0c;其缺点也是特别明显。尽管在新冠肺炎的冲击下&…

5252DE 5G 外场通信测试仪

5252DE 5G 外场通信测试仪 集先进算法和高性能硬件于一体的便携式测试仪表 产品综述 5252DE 5G 外场通信测试仪是集合高性能频谱处理模块、多制式解析算法软件于一体的手持式测试仪表&#xff0c;具有很好的便携性、兼容性与可拓展性。 5252DE 具有工作频段宽、性能指标高…

如何分割3D模型

拆分 3D 模型进行打印可以解决许多问题。 你可以使用较小的 3D 打印机打印大型零件&#xff0c;你的零件不会出现太多翘曲&#xff0c;并且零件在清洁和后处理过程中更容易处理。 当然&#xff0c;你需要在打印后将 3D 打印部件粘合在一起&#xff0c;但对于那些无法使用大型 …

C语言 指针——字符数组与字符指针:字符串的输入和输出

目录 逐个字符输入输出字符串 整体输入输出字符串 用scanf输入/输出字符串 用gets输入/输出字符串 用scanf输入/输出字符串 用gets输入/输出字符串 逐个字符输入输出字符串 #define STR_LEN 80 char str[STR_LEN 1 ]; 整体输入输出字符串 用scanf输入/输出字符串 用gets…

拼房、行程变更、跨月退改?复杂场景对账结算怎么办?

在实际商业场景中&#xff0c;销售渠道多样化、数据关联多方、场景多元化、业务逻辑多变性等都让对账成为一门“技术活”&#xff0c;也成为财务人员面前的“拦路虎”。尤其当面临多成本中心、跨项目和跨月退改的出差费用时。手动拆分费用、协调沟通、以及处理费用归属等问题&a…

Spring—依赖注入

一、Spring框架概念 1.什么是OCP&#xff1f; OCP是软件七大开发原则当中最基本的一个原则&#xff1a;开闭原则 对什么开?对扩展开放。 对什么闭?对修改关闭。 OCP原则是最核心的&#xff0c;最基本的&#xff0c;其他的六个原则都是为这个原则服务的。 OCP开闭原则的核…

HTML5+CSS3小实例:粘性文字的滚动效果

实例:粘性文字的滚动效果 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sca…

二叉树oj联习

判断是否为平衡二叉树 定义 oj题目 采用递归的思想 在gaodu函数中算出左子树的高度和右子树的高度 相减进行比较 再用递归遍历左右子树 依次算出每个结点的左右子树高度比较&#xff0c;只要有一个不符合条件则不为平衡二叉树 代码展示 int gaodu(struct TreeNode* a) {i…