cJSON解析一例通

#include <iostream>
#include "cJson/cJSON.h"

using namespace std;

void parse_json_node( cJSON * json,size_t * align_count )
{
    // 打印縮進
    for(int i = 0;i<*align_count;i++)
    {
        printf("  ");
    }
    switch(json->type)
    {
    case cJSON_False:
        printf("%s : false",json->string);
        break;
    case cJSON_True:
        printf("%s : true",json->string);
        break;
    case cJSON_NULL:
        printf("null");
        break;
    case cJSON_Number:
        printf("%s : %ll",json->string,json->valuedouble);
        break;
    case cJSON_String:
        printf("%s : \"%s\"",json->string,json->valuestring);
        break;
    case cJSON_Array:
        {
            if(json->string)
            {
                printf("%s : ",json->string);
            }
            ++*align_count;
            printf("[\n");


            int len = cJSON_GetArraySize(json);
            for(int i = 0;i<len;i++)
            {
                cJSON * child_json = cJSON_GetArrayItem(json,i);
                parse_json_node( child_json , align_count);
                printf("\n");
            }
            --*align_count;
            for(int i = 0;i<*align_count;i++)
            {
                printf("  ");
            }
            printf("]");

        }
        break;
    case cJSON_Object:
        {
            if(json->string)
            {
                printf("%s : ",json->string);
            }
            ++*align_count;
            printf("{\n");
            int len = cJSON_GetArraySize(json);
            for(int i = 0;i<len;i++)
            {
                cJSON * child_json = cJSON_GetArrayItem(json,i);
                parse_json_node( child_json , align_count);
                printf("\n");
            }
            --*align_count;
            for(int i = 0;i<*align_count;i++)
            {
                printf("  ");
            }
             printf("}");
        }
        break;
    }
}

int main()
{
    long long filesize = 0;
    FILE * file = fopen("json/test5","rb+");
    fseek(file,0,SEEK_END);
    filesize = ftell(file);
    fseek(file,0,SEEK_SET);
    char * buff = new char[filesize];
    fread(buff,1,filesize,file);
    fclose(file);
    cJSON * json = cJSON_Parse(buff);

    size_t align_count = 0;
    parse_json_node(json,&align_count);

   /* cJSON * menu = cJSON_GetObjectItem(json,"menu");
    int menu_size = cJSON_GetArraySize(menu);
    cJSON * items = cJSON_GetArrayItem(menu,1);
    int items_size = cJSON_GetArraySize(items);
    cJSON * item1 = cJSON_GetArrayItem(items,0);
    int item1_size = cJSON_GetArraySize(item1);
    cJSON * item1_attr1 = cJSON_GetArrayItem(item1,0);
    */
    return 0;
}

簡單明瞭,無需解釋!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章