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

心知天气数据JSON格式介绍

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

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

CJSON库
cJSON从名字可知,整个项目都是以极标准的C来写的,意思说,可以跨各种平台使用了。cJSON是一个超轻巧,携带方便,单文件,简单的可以作为ANSI-C标准的JSON解析器。

cJSON官网下载:cJSON download | SourceForge.net
cJSON GitHub下载:https://github.com/DaveGamble/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;
}

解析结果

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值