cJSON构造与解析json

 

场景1:构造json格式数据

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

void create_json()
{
    cJSON* root;
    root = cJSON_CreateObject();
    cJSON_AddStringToObject(root, "name", "zhangsan");
    cJSON_AddStringToObject(root, "age", "18");

    char* out;
    out = cJSON_Print(root);
    cJSON_Delete(root);
    printf("%s\n", out);
    free(out);
}

int main()
{
    create_json();
    return 0;
}

结果:

 

解析上面格式json:

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

void parse_json(char *str)
{
    if(strlen(str) == 0) return;

    cJSON *json = cJSON_Parse(str);
    if(json == NULL) return;

    cJSON *node = cJSON_GetObjectItem(json, "name");
    printf("name:%s\n", node->valuestring);

    node = cJSON_GetObjectItem(json, "age");
    printf("age:%s\n", node->valuestring);

    cJSON_Delete(json);

}

int main (int argc, const char * argv[])
{
    char str[1024] = "{\"name\":\"zhangsan\", \"age\":\"18\"}";
    parse_json(str);
    return 0;
}

结果:

 

场景2:构造json数组

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

void create_json()
{
    cJSON *root, *dir1, *dir2;
    root=cJSON_CreateArray();

    cJSON_AddItemToArray(root, dir1=cJSON_CreateObject());
    cJSON_AddStringToObject(dir1,"name","zhangsan");
    cJSON_AddStringToObject(dir1,"age","18");

    cJSON_AddItemToArray(root, dir2=cJSON_CreateObject());
    cJSON_AddStringToObject(dir2,"name","lisi");
    cJSON_AddStringToObject(dir2,"age","20");

    char *out=cJSON_Print(root);
    printf("%s\n", out);
    cJSON_Delete(root);
    free(out);
}
int main (int argc, const char * argv[])
{
    create_json();
    return 0;
}

结果:

 

解析上面json格式数据:

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

void parse_json(char *str)
{
    if(strlen(str) == 0) return;

    cJSON *json = cJSON_Parse(str);
    if(json == NULL) return;

    int size = cJSON_GetArraySize(json);
    int i = 0;
    for(i = 0; i < size; ++i)
    {
        cJSON *pSub = cJSON_GetArrayItem(json, i);

        cJSON *node = cJSON_GetObjectItem(pSub, "name");
        printf("name:%s\n", node->valuestring);

        node = cJSON_GetObjectItem(pSub, "age");
        printf("age:%s\n", node->valuestring);
    }

    cJSON_Delete(json);
}

int main (int argc, const char * argv[])
{
    char str[1024] = "[{\"name\":\"zhangsan\", \"age\":\"18\"},{\"name\":\"lisi\",\"age\":\"20\"}]";
    parse_json(str);
    return 0;
}

结果:

 

场景3:构造json组

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

void create_json()
{
    cJSON *root,*subdir,*dir1;
    root=cJSON_CreateObject();

    cJSON_AddItemToObject(root,"type1",subdir = cJSON_CreateArray());
    int i = 0;
    for(i = 0; i < 3; ++i)
    {
        cJSON_AddItemToObject(subdir,"dira",dir1=cJSON_CreateObject());
        cJSON_AddStringToObject(dir1,"name","zhangsan");
        cJSON_AddStringToObject(dir1,"age","18");
    }

    cJSON_AddItemToObject(root,"type2",subdir = cJSON_CreateArray());
    for(i = 0; i < 3; ++i)
    {
        cJSON_AddItemToObject(subdir,"dira",dir1=cJSON_CreateObject());
        cJSON_AddStringToObject(dir1,"name","lisi");
        cJSON_AddStringToObject(dir1,"age","19");
    }
    char *out=cJSON_Print(root);
    printf("%s\n", out);
    cJSON_Delete(root);
    free(out);
}
int main (int argc, const char * argv[])
{
    create_json();
    return 0;
}

结果:

 

解析上面的json格式数据:

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

void parse_json(char *str)
{
    if(strlen(str) == 0) return;

    cJSON *json = cJSON_Parse(str);
    if(json == NULL) return;

    cJSON* node_group = cJSON_GetObjectItem(json, "type1");
    cJSON* child_list = node_group->child;
    while (child_list != NULL)
    {
        char name[1024] = "";
        char age[1024] = "";
        sprintf(name, cJSON_GetObjectItem(child_list, "name")->valuestring);
        sprintf(age, cJSON_GetObjectItem(child_list, "age")->valuestring);
        printf("name:%s\n", name);
        printf("age:%s\n", age);

        child_list = child_list->next;
    }
    cJSON_Delete(json);
}

int main (int argc, const char * argv[])
{
    char str[1024] = "{\"type1\":[{\"name\":\"zhangsan\", \"age\":\"18\"},{\"name\":\"lisi\",\"age\":\"20\"}]}";
    parse_json(str);
    return 0;
}

结果:

 

场景4:构造json组

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
void create_json()
{
    cJSON* root;
    root = cJSON_CreateObject();
    cJSON_AddStringToObject(root, "age", "20");

    cJSON *client_public_ip = cJSON_CreateArray();
    cJSON_AddItemToArray(client_public_ip, cJSON_CreateString("zhangsan"));
    cJSON_AddItemToArray(client_public_ip, cJSON_CreateString("lisi"));

    cJSON_AddItemToObject(root, "name", client_public_ip);

    char *s = cJSON_PrintUnformatted(root);
    printf("%s\n", s);
    cJSON_Delete(root);
    free(s);
}
int main (int argc, const char * argv[])
{
    create_json();
    return 0;
}

结果:

 

解析上图json格式数据:

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

void parse_json(char *str)
{
    if(strlen(str) == 0) return;

    cJSON *json = cJSON_Parse(str);
    if(json == NULL) return;

    cJSON* node = cJSON_GetObjectItem(json, "name");
    int array_size = cJSON_GetArraySize(node);
    int iCnt = 0;
    for (iCnt = 0; iCnt < array_size; ++iCnt)
    {
        char name[1024] = "";
        cJSON* pSub = cJSON_GetArrayItem(node, iCnt);
        if (NULL == pSub) continue;

        sprintf(name, pSub->valuestring);
        printf("name:%s\n", name);

    }
    cJSON_Delete(json);
}

int main (int argc, const char * argv[])
{
    char str[1024] = "{\"age\":\"20\", \"name\":[\"zhangsan\", \"lisi\"]}";
    parse_json(str);
    return 0;
}

结果:

源码文件下载:

https://download.csdn.net/download/xiadeliang1111/19564471

参考:

http://blog.sina.com.cn/s/blog_a6fb6cc90101ffme.html

 

Guess you like

Origin blog.csdn.net/xiadeliang1111/article/details/117816432