JSON-C库的使用(1)Json对象数组的解析
2015-05-22 15:15
489 查看
版本:json-c-0.9.tar.gz
参考:http://blog.csdn.net/mengyafei43/article/details/38494139
示例代码:
运行结果:
参考:http://blog.csdn.net/mengyafei43/article/details/38494139
示例代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include "json.h" void encodeJson(); void decodeJson(); int main(int argc, char **argv) { int ret = 0; encodeJson(); decodeJson(); return ret; } static char *json_type_to_name(int json_type) { char json_type_name[128]; memset(json_type_name, 0x00, sizeof(json_type_name)); switch(json_type) { case json_type_null: snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_null"); break; case json_type_boolean: snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_boolean"); break; case json_type_double: snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_double"); break; case json_type_int: snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_int"); break; case json_type_object: snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_object"); break; case json_type_array: snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_array"); break; case json_type_string: snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_string"); break; } return json_type_name; } static void getFieldValue(struct json_object *child_obj, const char *field) { struct json_object *obj = json_object_object_get(child_obj, field); enum json_type obj_type = json_object_get_type(obj); //printf("%s json_type is %s\n", field, json_type_to_name(obj_type)); if (obj_type == json_type_int) { printf("%s=%d\n", field, json_object_get_int(obj)); } else if (obj_type == json_type_string) { printf("%s=%s\n", field, json_object_get_string(obj)); } } void decodeJson() { const char *json_string = "{ \n\ \"userinfo\": [ \n\ { \"pin\": \"10000\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\ { \"pin\": \"10001\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\ { \"pin\": \"10002\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\ { \"pin\": \"10003\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\ { \"pin\": \"10004\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\ { \"pin\": \"10005\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\ { \"pin\": \"10006\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\ { \"pin\": \"10007\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\ { \"pin\": \"10008\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\ { \"pin\": \"10009\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 } \n\ ] }"; int ret = 0; int i = 0; struct json_object *root_obj = NULL; struct json_object *arry_obj = NULL; struct json_object *child_obj = NULL; struct lh_entry *entry = NULL; char *key = NULL; root_obj = json_tokener_parse(json_string); entry = json_object_get_object(root_obj)->head; if (entry) { key = (char *)entry->k; arry_obj = (struct json_object *)entry->v; if (json_type_array != json_object_get_type(arry_obj) && json_type_object != json_object_get_type(arry_obj)) { return -1; } printf("key = %s\n", key); printf("array_obj = %s\n", json_object_to_json_string(arry_obj)); if (json_type_array == json_object_get_type(arry_obj)) { for(i = 0; i < json_object_array_length(arry_obj); i++) { child_obj = json_object_array_get_idx(arry_obj, i); //printf("child_obj = %s\n", json_object_to_json_string(child_obj)); getFieldValue(child_obj, "pin"); getFieldValue(child_obj, "cardno"); getFieldValue(child_obj, "password"); getFieldValue(child_obj, "name"); getFieldValue(child_obj, "Privilege"); getFieldValue(child_obj, "flag"); printf("\n"); } } else if (json_type_object == json_object_get_type(arry_obj)) { } } } void encodeJson() { int i = 0; struct json_object *root_obj = NULL; struct json_object *child_obj = NULL; struct json_object *array_obj = NULL; char *tmpStr = NULL; root_obj = json_object_new_object(); array_obj = json_object_new_array(); for(i = 0; i < 10; i++) { child_obj = json_object_new_object(); json_object_object_add(child_obj, "pin", json_object_new_string("10000")); json_object_object_add(child_obj, "cardno", json_object_new_string("123456789")); json_object_object_add(child_obj, "password", json_object_new_string("123456")); json_object_object_add(child_obj, "name", json_object_new_string("paul")); json_object_object_add(child_obj, "Privilege", json_object_new_int(14)); json_object_object_add(child_obj, "flag", json_object_new_int(1)); json_object_array_add(array_obj, child_obj); child_obj = NULL; } json_object_object_add(root_obj, "userinfo", array_obj); tmpStr = json_object_to_json_string(root_obj); printf("%s\n", tmpStr); }
运行结果:
相关文章推荐
- Ajax使用方法,经典Ajax封装,可接收解析后台传回的json对象和json数组
- [Android | 小代码] 天气预报 简易Demo json解析数组+对象 Gson+Volley简单使用
- 使用Java进行Json数据的解析(对象数组的相互嵌套)
- 使用Gson解析json 数组转对象
- android中使用httpclient方法获得网页内容并对json对象解析
- Gson的使用——Gson解析json数组并展示在ListView控件上
- Json解析数组对象
- Android中Gson解析json数据使用@SerializedName注解与java对象不匹配的字段
- 使用FastJSON,将对象或数组和JSON串互转
- Android中Gson解析json数据使用@SerializedName注解与java对象不匹配的字段
- Android JSON数据格式的解析,与简单对象、带泛型的List和Map的转换,以及GSON的使用
- 复选框选中table一行的数据,并组成JSON数组对象传递到后台,在后台解析遍历
- 使用JS解析JSON数组
- 使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象
- 解析json数组对象
- 使用jackson注解返还json对象(字符串数组),配合ajax做异步显示
- JAVA中快速解析JSON对象里包含的JSON数组
- springMVC使用ajax返回json对象,用jquery进行解析.
- 使用gson解析json后怎么把数组放到listview中
- jquery遍历筛选数组的几种方法和遍历解析json对象