CJson的使用

本文通过一个详细的示例,介绍了如何使用cJSON库创建和解析JSON数据。包括创建复杂的JSON对象,如嵌套的对象和数组,以及如何从字符串中解析JSON数据并访问其属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// cJsonDemo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "cJSON.h"
#include <windows.h>
/*
"semantic": {
    "slots":    {
        "name": "张三"
    }
},
"type": 0;
"operation" : "CALL",
"service" : "telephone",
"text" : "大家好"

"children":     [{
"name": "May",
"age":  2
}, {
"name": "Kendy",
"age":  3
}, {
"name": "Mark",
"age":  1
}]

}
*/
cJSON * createJson()
{
    cJSON * root = cJSON_CreateObject();
    cJSON * semtRoot = cJSON_CreateObject();
    cJSON * slotRoot = cJSON_CreateObject();
    cJSON_AddItemToObject(slotRoot, "name", cJSON_CreateString("张三"));
    cJSON_AddItemToObject(semtRoot, "slots", slotRoot);
    //cJSON_AddItemToObject(semtRoot, 
    cJSON_AddItemToObject(root, "semantic", semtRoot);
    cJSON_AddItemToObject(root, "operation", cJSON_CreateString("CALL"));
    cJSON_AddItemToObject(root, "type", cJSON_CreateNumber(0));
    cJSON_AddItemToObject(root, "service", cJSON_CreateString("telephone"));
    cJSON_AddItemToObject(root, "text", cJSON_CreateString("大家好"));

    cJSON *childArray = cJSON_CreateArray();
    
    cJSON *child1 = cJSON_CreateObject();
    cJSON *child2 = cJSON_CreateObject();
    cJSON *child3 = cJSON_CreateObject();

    cJSON_AddItemToObject(child1, "name", cJSON_CreateString("May"));
    cJSON_AddItemToObject(child1, "age", cJSON_CreateNumber(3));
    cJSON_AddItemToObject(child2, "name", cJSON_CreateString("Kendy"));
    cJSON_AddItemToObject(child2, "age", cJSON_CreateNumber(2));
    cJSON_AddItemToObject(child3, "name", cJSON_CreateString("Mark"));
    cJSON_AddItemToObject(child3, "age", cJSON_CreateNumber(1));
    
    cJSON_AddItemToArray(childArray, child1);
    cJSON_AddItemToArray(childArray, child2);
    cJSON_AddItemToArray(childArray, child3);
    cJSON_AddItemToObject(root, "children", childArray);

    //printf("%s\n", cJSON_Print(root));

    return root;
}

void parseJson(char * cPtr)
{
    cJSON* root = cJSON_Parse(cPtr);
    cJSON * typeJson = cJSON_GetObjectItem(root, "type");
    int nType = typeJson->valueint;
    cJSON * operJson = cJSON_GetObjectItem(root, "operation");
    char *oper = operJson->valuestring;
    cJSON * serJson = cJSON_GetObjectItem(root, "service");
    cJSON * txtJson = cJSON_GetObjectItem(root, "text");
    cJSON * semJson = cJSON_GetObjectItem(root, "semantic");
    cJSON * slotsJson = cJSON_GetObjectItem(semJson, "slots");
    char *nam = cJSON_GetObjectItem(slotsJson, "name")->valuestring;
    cJSON *childArr = cJSON_GetObjectItem(root, "children");
    int nChildSize = cJSON_GetArraySize(childArr);
    cJSON* temp;
    for (int i = 0; i < nChildSize; i++)
    {
        temp = cJSON_GetArrayItem(childArr, i);
        char *name = cJSON_GetObjectItem(temp, "name")->valuestring;
        int age = cJSON_GetObjectItem(temp, "age")->valueint;
        //printf("%d", age);
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    cJSON* root = createJson();
    printf("%s\n", cJSON_Print(root));
    parseJson(cJSON_Print(root));
    Sleep(10000);

    cJSON_Delete(root);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值