以下是使用cJSON库实现解析JSON数据的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cJSON.h"

int main() {
    // JSON字符串
    char jsonStr[] = "{\"data\":{\"CREATEDATE\":\"2023-08-25 10:57:31\",\"COLLECT_IP\":\"198.168.200.40\",\"COLLECT_NAME\":\"流量基线\",\"DEVICE_IP\":\"198.168.200.40\",\"DEVICE_TYPE\":\"网络交换机\",\"DEVICE_NAME\":\"H3C\",\"TARGET_IP\":\"192.168.10.11\",\"TARGET_PORT\":\"1234\",\"TARGET_HOSTNAME\":\"abc\",\"SOURCE_IP\":\"192.168.10.23\",\"SOURCE_PORT\":\"2232\",\"SOURCE_HOSTNAME\":\"test\",\"COLLECT_EVENT_TIME\":\"2023-08-25 18:41:07\",\"EVENT_HAPPEN_TIME\":\"2023-08-25 18:41:07\",\"EVENT_TYPE\":\"上行流量\",\"EVENT_NAME\":\"上行流量\",\"EVENT_CONTENT\":\"上行流量=0.098,超出基准下限0.9个单位\"}}";
    
    // 解析JSON
    cJSON *root = cJSON_Parse(jsonStr);
    if (root == NULL) {
        printf("Failed to parse JSON: %s\n", cJSON_GetErrorPtr());
        return 1;
    }
    
    // 获取data字段
    cJSON *data = cJSON_GetObjectItem(root, "data");
    if (data == NULL) {
        printf("Failed to get data field\n");
        cJSON_Delete(root);
        return 1;
    }
    
    // 获取各个字段的值
    char *createDate = cJSON_GetObjectItem(data, "CREATEDATE")->valuestring;
    char *collectIP = cJSON_GetObjectItem(data, "COLLECT_IP")->valuestring;
    char *collectName = cJSON_GetObjectItem(data, "COLLECT_NAME")->valuestring;
    char *deviceIP = cJSON_GetObjectItem(data, "DEVICE_IP")->valuestring;
    char *deviceType = cJSON_GetObjectItem(data, "DEVICE_TYPE")->valuestring;
    char *deviceName = cJSON_GetObjectItem(data, "DEVICE_NAME")->valuestring;
    char *targetIP = cJSON_GetObjectItem(data, "TARGET_IP")->valuestring;
    char *targetPort = cJSON_GetObjectItem(data, "TARGET_PORT")->valuestring;
    char *targetHostname = cJSON_GetObjectItem(data, "TARGET_HOSTNAME")->valuestring;
    char *sourceIP = cJSON_GetObjectItem(data, "SOURCE_IP")->valuestring;
    char *sourcePort = cJSON_GetObjectItem(data, "SOURCE_PORT")->valuestring;
    char *sourceHostname = cJSON_GetObjectItem(data, "SOURCE_HOSTNAME")->valuestring;
    char *collectEventTime = cJSON_GetObjectItem(data, "COLLECT_EVENT_TIME")->valuestring;
    char *eventHappenTime = cJSON_GetObjectItem(data, "EVENT_HAPPEN_TIME")->valuestring;
    char *eventType = cJSON_GetObjectItem(data, "EVENT_TYPE")->valuestring;
    char *eventName = cJSON_GetObjectItem(data, "EVENT_NAME")->valuestring;
    char *eventContent = cJSON_GetObjectItem(data, "EVENT_CONTENT")->valuestring;
    
    // 打印各个字段的值
    printf("CREATE DATE: %s\n", createDate);
    printf("COLLECT IP: %s\n", collectIP);
    printf("COLLECT NAME: %s\n", collectName);
    printf("DEVICE IP: %s\n", deviceIP);
    printf("DEVICE TYPE: %s\n", deviceType);
    printf("DEVICE NAME: %s\n", deviceName);
    printf("TARGET IP: %s\n", targetIP);
    printf("TARGET PORT: %s\n", targetPort);
    printf("TARGET HOSTNAME: %s\n", targetHostname);
    printf("SOURCE IP: %s\n", sourceIP);
    printf("SOURCE PORT: %s\n", sourcePort);
    printf("SOURCE HOSTNAME: %s\n", sourceHostname);
    printf("COLLECT EVENT TIME: %s\n", collectEventTime);
    printf("EVENT HAPPEN TIME: %s\n", eventHappenTime);
    printf("EVENT TYPE: %s\n", eventType);
    printf("EVENT NAME: %s\n", eventName);
    printf("EVENT CONTENT: %s\n", eventContent);
    
    // 释放内存
    cJSON_Delete(root);
    
    return 0;
}

注意:在编译时需要链接cJSON库,可以使用gcc命令进行编译,例如:

gcc main.c cJSON.c -o main

请确保cJSON库的头文件和源文件与示例代码在同一个目录下,并将编译生成的可执行文件命名为main


原文地址: http://www.cveoy.top/t/topic/iZJe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录