C Programer  - 讨论区

标题:使用json-c解析json格式数据

2014年01月30日 星期四 13:25

使用C语言解析json确实是一件挺麻烦的事情,json-c提供的API非常复杂,下面的实例代码是我很久之前写的,当我使用过cppcms或者cxxtools提供的json解析的C++ API之后,再也不想回到C语言了。

 

#include <stdio.h>
#include <string.h>
#include <json.h>
void json_print_value(json_object *obj);
void json_print_array(json_object *obj);
void json_print_object(json_object *obj);

void json_print_value(json_object *obj) {
    if(!obj) return;
    json_type type=json_object_get_type(obj);
    if(type == json_type_boolean) {
        if(json_object_get_boolean(obj)) {
            printf("true");
        } else {
            printf("false");
        }
    } else if(type == json_type_double) {
        printf("%lf",json_object_get_double(obj));
    } else if(type == json_type_int) {
        printf("%d",json_object_get_int(obj));
    } else if(type == json_type_string) {
        printf("%s",json_object_get_string(obj));
    } else if(type == json_type_object) {
        json_print_object(obj);
    } else if(type == json_type_array) {
        json_print_array(obj);
    } else {
        printf("ERROR");
    }
    printf(" ");
}

void json_print_array(json_object *obj) {
    if(!obj) return;
    int length=json_object_array_length(obj);
    for(int i=0;i<length;i++) {
        json_object *val=json_object_array_get_idx(obj,i);
        json_print_value(val);
    }
}

void json_print_object(json_object *obj) {
    if(!obj) return;
    json_object_object_foreach(obj,key,val) {
        printf("%s => ",key);
        json_print_value(val);
    }
}

int main(int argc,char **argv) {

    char buf[1024];
    while(!feof(stdin)) {
        memset(buf,0,1024);
        fgets(buf,1023,stdin);
        //fputs(buf,stdout);
        json_object *obj=json_tokener_parse(buf);
        json_print_value(obj);
        json_object_put(obj);
        printf("\n");
    }

    return 0;
}

参考资料:

https://github.com/json-c/json-c/wiki

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号