c json解析示例
json-c是最主流的json c库。
[root@hs-10-20-30-193 build]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. -- The C compiler identification is GNU 4.8.5 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc - works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Looking for sys/resource.h -- Looking for sys/resource.h - found -- Looking for getrusage -- Looking for getrusage - found -- Wrote /home/zjh/json-c-json-c-0.16-20220414/build/apps_config.h -- Looking for fcntl.h -- Looking for fcntl.h - found -- Looking for inttypes.h -- Looking for inttypes.h - found -- Looking for stdarg.h -- Looking for stdarg.h - found -- Looking for strings.h -- Looking for strings.h - found -- Looking for string.h -- Looking for string.h - found -- Looking for syslog.h -- Looking for syslog.h - found -- Looking for 4 include files stdlib.h, ..., float.h -- Looking for 4 include files stdlib.h, ..., float.h - found -- Looking for unistd.h -- Looking for unistd.h - found -- Looking for sys/types.h -- Looking for sys/types.h - found -- Looking for dlfcn.h -- Looking for dlfcn.h - found -- Looking for endian.h -- Looking for endian.h - found -- Looking for limits.h -- Looking for limits.h - found -- Looking for locale.h -- Looking for locale.h - found -- Looking for memory.h -- Looking for memory.h - found -- Looking for stdint.h -- Looking for stdint.h - found -- Looking for stdlib.h -- Looking for stdlib.h - found -- Looking for sys/cdefs.h -- Looking for sys/cdefs.h - found -- Looking for sys/param.h -- Looking for sys/param.h - found -- Looking for sys/random.h -- Looking for sys/random.h - not found -- Looking for sys/stat.h -- Looking for sys/stat.h - found -- Looking for xlocale.h -- Looking for xlocale.h - found -- Looking for _isnan -- Looking for _isnan - not found -- Looking for _finite -- Looking for _finite - not found -- Looking for INFINITY -- Looking for INFINITY - found -- Looking for isinf -- Looking for isinf - found -- Looking for isnan -- Looking for isnan - found -- Looking for nan -- Looking for nan - found -- Looking for _doprnt -- Looking for _doprnt - not found -- Looking for snprintf -- Looking for snprintf - found -- Looking for vasprintf -- Looking for vasprintf - found -- Looking for vsnprintf -- Looking for vsnprintf - found -- Looking for vprintf -- Looking for vprintf - found -- Looking for arc4random -- Looking for arc4random - not found -- Looking for bsd/stdlib.h -- Looking for bsd/stdlib.h - not found -- Looking for open -- Looking for open - found -- Looking for realloc -- Looking for realloc - found -- Looking for setlocale -- Looking for setlocale - found -- Looking for uselocale -- Looking for uselocale - found -- Looking for strcasecmp -- Looking for strcasecmp - found -- Looking for strncasecmp -- Looking for strncasecmp - found -- Looking for strdup -- Looking for strdup - found -- Looking for strerror -- Looking for strerror - found -- Looking for vsyslog -- Looking for vsyslog - found -- Looking for strtoll -- Looking for strtoll - found -- Looking for strtoull -- Looking for strtoull - found -- Looking for stddef.h -- Looking for stddef.h - found -- Check size of int -- Check size of int - done -- Check size of int64_t -- Check size of int64_t - done -- Check size of long -- Check size of long - done -- Check size of long long -- Check size of long long - done -- Check size of size_t -- Check size of size_t - done -- Check size of ssize_t // ssize_t这个数据类型用来表示可以被执行读写操作的数据块的大小。 它和size_t类似,但必需是signed.意即:它表示的是signed size_t类型的。 -- Check size of ssize_t - done -- Performing Test HAS_GNU_WARNING_LONG -- Performing Test HAS_GNU_WARNING_LONG - Failed -- Performing Test HAVE_ATOMIC_BUILTINS -- Performing Test HAVE_ATOMIC_BUILTINS - Success -- Performing Test HAVE___THREAD -- Performing Test HAVE___THREAD - Success -- Wrote /home/zjh/json-c-json-c-0.16-20220414/build/config.h -- Wrote /home/zjh/json-c-json-c-0.16-20220414/build/json_config.h -- Performing Test REENTRANT_WORKS -- Performing Test REENTRANT_WORKS - Success -- Performing Test BSYMBOLIC_WORKS -- Performing Test BSYMBOLIC_WORKS - Success -- Performing Test VERSION_SCRIPT_WORKS -- Performing Test VERSION_SCRIPT_WORKS - Success -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) Warning: doxygen not found, the 'doc' target will not be included -- Configuring done -- Generating done -- Build files have been written to: /home/zjh/json-c-json-c-0.16-20220414/build [root@hs-10-20-30-193 build]# make all install Scanning dependencies of target json-c [ 1%] Building C object CMakeFiles/json-c.dir/arraylist.c.o [ 2%] Building C object CMakeFiles/json-c.dir/debug.c.o [ 3%] Building C object CMakeFiles/json-c.dir/json_c_version.c.o [ 4%] Building C object CMakeFiles/json-c.dir/json_object.c.o [ 5%] Building C object CMakeFiles/json-c.dir/json_object_iterator.c.o [ 7%] Building C object CMakeFiles/json-c.dir/json_tokener.c.o [ 8%] Building C object CMakeFiles/json-c.dir/json_util.c.o [ 9%] Building C object CMakeFiles/json-c.dir/json_visit.c.o [ 10%] Building C object CMakeFiles/json-c.dir/linkhash.c.o [ 11%] Building C object CMakeFiles/json-c.dir/printbuf.c.o [ 13%] Building C object CMakeFiles/json-c.dir/random_seed.c.o [ 14%] Building C object CMakeFiles/json-c.dir/strerror_override.c.o [ 15%] Building C object CMakeFiles/json-c.dir/json_pointer.c.o [ 16%] Linking C shared library libjson-c.so [ 16%] Built target json-c Scanning dependencies of target json-c-static [ 17%] Building C object CMakeFiles/json-c-static.dir/arraylist.c.o [ 19%] Building C object CMakeFiles/json-c-static.dir/debug.c.o [ 20%] Building C object CMakeFiles/json-c-static.dir/json_c_version.c.o [ 21%] Building C object CMakeFiles/json-c-static.dir/json_object.c.o [ 22%] Building C object CMakeFiles/json-c-static.dir/json_object_iterator.c.o [ 23%] Building C object CMakeFiles/json-c-static.dir/json_tokener.c.o [ 25%] Building C object CMakeFiles/json-c-static.dir/json_util.c.o [ 26%] Building C object CMakeFiles/json-c-static.dir/json_visit.c.o [ 27%] Building C object CMakeFiles/json-c-static.dir/linkhash.c.o [ 28%] Building C object CMakeFiles/json-c-static.dir/printbuf.c.o [ 29%] Building C object CMakeFiles/json-c-static.dir/random_seed.c.o [ 30%] Building C object CMakeFiles/json-c-static.dir/strerror_override.c.o [ 32%] Building C object CMakeFiles/json-c-static.dir/json_pointer.c.o [ 33%] Linking C static library libjson-c.a [ 33%] Built target json-c-static Scanning dependencies of target test_json_pointer [ 34%] Building C object tests/CMakeFiles/test_json_pointer.dir/test_json_pointer.c.o [ 35%] Linking C executable test_json_pointer [ 35%] Built target test_json_pointer Scanning dependencies of target test_visit [ 36%] Building C object tests/CMakeFiles/test_visit.dir/test_visit.c.o [ 38%] Linking C executable test_visit [ 38%] Built target test_visit Scanning dependencies of target test_cast [ 39%] Building C object tests/CMakeFiles/test_cast.dir/test_cast.c.o [ 40%] Linking C executable test_cast [ 40%] Built target test_cast Scanning dependencies of target testReplaceExisting [ 41%] Building C object tests/CMakeFiles/testReplaceExisting.dir/testReplaceExisting.c.o [ 42%] Linking C executable testReplaceExisting [ 42%] Built target testReplaceExisting Scanning dependencies of target test4 [ 44%] Building C object tests/CMakeFiles/test4.dir/test4.c.o [ 45%] Linking C executable test4 [ 45%] Built target test4 Scanning dependencies of target test_int_add [ 46%] Building C object tests/CMakeFiles/test_int_add.dir/test_int_add.c.o [ 47%] Linking C executable test_int_add [ 47%] Built target test_int_add Scanning dependencies of target test_compare [ 48%] Building C object tests/CMakeFiles/test_compare.dir/test_compare.c.o [ 50%] Linking C executable test_compare [ 50%] Built target test_compare Scanning dependencies of target test1 [ 51%] Building C object tests/CMakeFiles/test1.dir/test1.c.o [ 52%] Linking C executable test1 [ 52%] Built target test1 Scanning dependencies of target test_deep_copy [ 53%] Building C object tests/CMakeFiles/test_deep_copy.dir/test_deep_copy.c.o [ 54%] Linking C executable test_deep_copy [ 54%] Built target test_deep_copy Scanning dependencies of target test_parse_int64 [ 55%] Building C object tests/CMakeFiles/test_parse_int64.dir/test_parse_int64.c.o [ 57%] Linking C executable test_parse_int64 [ 57%] Built target test_parse_int64 Scanning dependencies of target test2Formatted [ 58%] Building C object tests/CMakeFiles/test2Formatted.dir/test2.c.o [ 59%] Building C object tests/CMakeFiles/test2Formatted.dir/parse_flags.c.o [ 60%] Linking C executable test2Formatted [ 60%] Built target test2Formatted Scanning dependencies of target test_util_file [ 61%] Building C object tests/CMakeFiles/test_util_file.dir/test_util_file.c.o [ 63%] Building C object tests/CMakeFiles/test_util_file.dir/__/strerror_override.c.o [ 64%] Linking C executable test_util_file [ 64%] Built target test_util_file Scanning dependencies of target test2 [ 65%] Building C object tests/CMakeFiles/test2.dir/test2.c.o [ 66%] Linking C executable test2 [ 66%] Built target test2 Scanning dependencies of target test_locale [ 67%] Building C object tests/CMakeFiles/test_locale.dir/test_locale.c.o [ 69%] Linking C executable test_locale [ 69%] Built target test_locale Scanning dependencies of target test_printbuf [ 70%] Building C object tests/CMakeFiles/test_printbuf.dir/test_printbuf.c.o [ 71%] Linking C executable test_printbuf [ 71%] Built target test_printbuf Scanning dependencies of target test1Formatted [ 72%] Building C object tests/CMakeFiles/test1Formatted.dir/test1.c.o [ 73%] Building C object tests/CMakeFiles/test1Formatted.dir/parse_flags.c.o [ 75%] Linking C executable test1Formatted [ 75%] Built target test1Formatted Scanning dependencies of target test_float [ 76%] Building C object tests/CMakeFiles/test_float.dir/test_float.c.o [ 77%] Linking C executable test_float [ 77%] Built target test_float Scanning dependencies of target test_object_iterator [ 78%] Building C object tests/CMakeFiles/test_object_iterator.dir/test_object_iterator.c.o [ 79%] Linking C executable test_object_iterator [ 79%] Built target test_object_iterator Scanning dependencies of target test_null [ 80%] Building C object tests/CMakeFiles/test_null.dir/test_null.c.o [ 82%] Linking C executable test_null [ 82%] Built target test_null Scanning dependencies of target test_double_serializer [ 83%] Building C object tests/CMakeFiles/test_double_serializer.dir/test_double_serializer.c.o [ 84%] Linking C executable test_double_serializer [ 84%] Built target test_double_serializer Scanning dependencies of target test_parse [ 85%] Building C object tests/CMakeFiles/test_parse.dir/test_parse.c.o [ 86%] Linking C executable test_parse [ 86%] Built target test_parse Scanning dependencies of target test_set_serializer [ 88%] Building C object tests/CMakeFiles/test_set_serializer.dir/test_set_serializer.c.o [ 89%] Linking C executable test_set_serializer [ 89%] Built target test_set_serializer Scanning dependencies of target test_set_value [ 90%] Building C object tests/CMakeFiles/test_set_value.dir/test_set_value.c.o [ 91%] Linking C executable test_set_value [ 91%] Built target test_set_value Scanning dependencies of target test_charcase [ 92%] Building C object tests/CMakeFiles/test_charcase.dir/test_charcase.c.o [ 94%] Linking C executable test_charcase [ 94%] Built target test_charcase Scanning dependencies of target test_strerror [ 95%] Building C object tests/CMakeFiles/test_strerror.dir/test_strerror.c.o [ 96%] Building C object tests/CMakeFiles/test_strerror.dir/__/strerror_override.c.o [ 97%] Linking C executable test_strerror [ 97%] Built target test_strerror Scanning dependencies of target json_parse [ 98%] Building C object apps/CMakeFiles/json_parse.dir/json_parse.c.o [100%] Linking C executable json_parse [100%] Built target json_parse Install the project... -- Install configuration: "debug" -- Installing: /usr/local/lib64/libjson-c.so.5.2.0 -- Up-to-date: /usr/local/lib64/libjson-c.so.5 -- Up-to-date: /usr/local/lib64/libjson-c.so -- Installing: /usr/local/lib64/libjson-c.a -- Installing: /usr/local/lib64/cmake/json-c/json-c-targets.cmake -- Installing: /usr/local/lib64/cmake/json-c/json-c-targets-debug.cmake -- Installing: /usr/local/lib64/cmake/json-c/json-c-config.cmake -- Installing: /usr/local/lib64/pkgconfig/json-c.pc -- Installing: /usr/local/include/json-c/json_config.h -- Installing: /usr/local/include/json-c/json.h -- Installing: /usr/local/include/json-c/arraylist.h -- Installing: /usr/local/include/json-c/debug.h -- Installing: /usr/local/include/json-c/json_c_version.h -- Installing: /usr/local/include/json-c/json_inttypes.h -- Installing: /usr/local/include/json-c/json_object.h -- Installing: /usr/local/include/json-c/json_object_iterator.h -- Installing: /usr/local/include/json-c/json_tokener.h -- Installing: /usr/local/include/json-c/json_types.h -- Installing: /usr/local/include/json-c/json_util.h -- Installing: /usr/local/include/json-c/json_visit.h -- Installing: /usr/local/include/json-c/linkhash.h -- Installing: /usr/local/include/json-c/printbuf.h -- Installing: /usr/local/include/json-c/json_pointer.h
// 解析字符串 json_object* root = json_tokener_parse(json_str); // 获取根节点里面的"C"属性 json_object* changes = json_object_object_get(root, "C"); // 判断json属性值的类型 if (json_object_get_type(changes) == json_type_null) { printf("empty xlog record, just a ddl or not supported dml(not insert/update/delete/truncate)\n"); return OCI_SUCCESS; } else { int change_rows = json_object_array_length(changes); // 获取json数组的长度 if (change_rows > 2) json_object_array_sort(changes, json_sort_by_obj_kind_func); // json数组排序 ...... // 获取json数组中某个成员的值 record = json_object_array_get_idx(changes, i); record_attr = json_object_object_get(record, "K"); const char* dml_type = json_object_get_string(record_attr); // json对象转字符串
json_object_put(root); // 最后必须调用json_object_put(root)解除对root对象的引用,否则会导致内存泄露
void json_object_array_sort(struct json_object *jso, int (*sort_fn)(const void *, const void *)) { assert(json_object_get_type(jso) == json_type_array); array_list_sort(JC_ARRAY(jso)->c_array, sort_fn); } // 排序函数 static int json_sort_by_obj_kind_func(const void* j1, const void* j2) { json_object* const* jso1, * const* jso2; char str1[65] = { 0 }, str2[65] = { 0 }; jso1 = (json_object* const*)j1; jso2 = (json_object* const*)j2; if (!*jso1 && !*jso2) return 0; if (!*jso1) return -1; if (!*jso2) return 1; snprintf(str1, 64, "%s %s %s", json_object_get_string(json_object_object_get(*jso1, "K")), json_object_get_string(json_object_object_get(*jso1, "T")), json_object_get_string(json_object_object_get(*jso1, "S"))); snprintf(str2, 64, "%s %s %s", json_object_get_string(json_object_object_get(*jso2, "K")), json_object_get_string(json_object_object_get(*jso2, "T")), json_object_get_string(json_object_object_get(*jso2, "S"))); return strcmp(str1, str2); }
https://www.cnblogs.com/qingergege/p/5997762.html json-c开发指南
https://json-c.github.io/json-c/json-c-current-release/doc/html/index.html
https://github.com/miloyip/nativejson-benchmark json c/c++库性能对比
http://json-c.github.io/json-c/json-c-current-release/doc/html/json__object_8h.html
https://www.jianshu.com/p/659bb1b09f1b JSON解析器json-c
https://joysofprogramming.com/programming-tutorials/json-c-libjson-tutorial/ json c示例
https://github.com/rbtylee/tutorial-jsonc/blob/master/tutorial/index.md 官方示例
https://www.json.org/json-zh.html 可以查看所有的json库
分类:
c/c++/go/rust
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!