实现json解析工具jcat
为什么80%的码农都做不了架构师?>>>
jcat是一个shell下的解析json的工具,具有以下功能:
- 支持指定路径解析,打印指定路径下的所有对象信息
- 支持宏路径,可以级联宏替换
- 使用tbox进行了跨平台支持,预编译版本直接可以在./tbox/tool目录下找到,因为新版tbox makefile架构就是采用jcat来解析*.pkg/manifest.json清单文件
使用方式拿polarssl.pkg/manifest.json的举例: { "format": { "name": "The TBOOX Package Format" , "version": "v1.0.1" , "website": "http://www.tboox.org" }
, "package":{"name": "The PolarSSL Library", "website": "http://www.polarssl.org"}, "compiler": {"default":{"debug":{"libs": "polarssl", "libpath": "", "incpath": "", "libflags": "", "incflags": ""}, "release": "$.compiler.default.debug"}, "linux" :{"x64": "$.compiler.default"}, "mac" :{"x86": "$.compiler.default", "x64": "$.compiler.default"}, "msvc" :{"x86": "$.compiler.default"}, "mingw" :{"x86": "$.compiler.default"}, "cygwin" :{"x86": "$.compiler.default"}, "ios" :{"armv7": "$.compiler.default", "armv7s": "$.compiler.default", "arm64": "$.compiler.default"}, "android" :{"armv5te": "$.compiler.default", "armv6": "$.compiler.default"}}
}
上述manifest.json中,以$开头的字符串均为宏路径,例如:$.compiler.default,用来引用其他地方的配置数据,减小配置冗余
执行jcat, 获取 .compiler.mac.x64.debug 路径的内容
./tool/jcat/jcat --filter=.compiler.mac.x64.debug ./pkg/polarssl.pkg/manifest.json
返回结果如下:
{"incpath":"","incflags":"","libs":"polarssl","libflags":"","libpath":""}
是不是很方便?解析过程可以递归处理替换宏路径,返回真实的数据。其他详细使用方式,可以通过如下命令获取:
./tool/jcat/jcat --help
看了使用过程,是不是觉得实现这样一个jcat很复杂呢,其实非常简单,只要使用TBOX的object库,可以非常方便的实现它,下面就晒下jcat的代码吧:
#include "tbox/tbox.h"static tb_option_item_t g_options[] =
{{ 'f', "filter", TB_OPTION_MODE_KEY_VAL, TB_OPTION_TYPE_CSTR, "the json filter\n"".e.g\n""\n""file:\n""{\n"" \"string\": \"hello world!\"\n"", \"com.xxx.xxx\": \"hello world\"\n"", \"integer\": 31415926\n"", \"array\":\n"" [\n"" \"hello world!\"\n"" , 31415926\n"" , 3.1415926\n"" , false\n"" , true\n"" , { \"string\": \"hello world!\" }\n"" ]\n"", \"macro\": \"$.array[2]\"\n"", \"macro2\": \"$.com\\\\.xxx\\\\.xxx\"\n"", \"macro3\": \"$.macro\"\n"", \"macro4\": \"$.array\"\n""}\n""\n""filter:\n"" 1. \".string\" : hello world!\n"" 2. \".array[1]\" : 31415926\n"" 3. \".array[5].string\" : hello world!\n"" 4. \".com\\.xxx\\.xxx\" : hello world\n"" 5. \".macro\" : 3.1415926\n"" 6. \".macro2\" : hello world\n"" 7. \".macro3\" : 3.1415926\n"" 8. \".macro4[0]\" : \"hello world!\"\n"}
, {'h', "help", TB_OPTION_MODE_KEY, TB_OPTION_TYPE_BOOL, "display this help and exit"}
, {'-', "file", TB_OPTION_MODE_VAL, TB_OPTION_TYPE_CSTR, "the json file" }};/* //* main*/
tb_int_t main(tb_int_t argc, tb_char_t** argv)
{// init tboxif (!tb_init(tb_null, tb_null, 0)) return 0;// init optiontb_option_ref_t option = tb_option_init("jcat", "cat the json file", g_options);if (option){// done optionif (tb_option_done(option, argc - 1, &argv[1])){// done fileif (tb_option_find(option, "file")){// load objecttb_object_ref_t root = tb_object_read_from_url(tb_option_item_cstr(option, "file"));if (root){// done filtertb_object_ref_t object = root;if (tb_option_find(option, "filter")) object = tb_object_seek(root, tb_option_item_cstr(option, "filter"), tb_true);// dump 数据对象,这里主要为了过滤 字符串内容的 ""// 否则直接使用tb_object_dump会更简单,只需一行代码if (object) {// donetb_char_t info[8192] = {0};tb_long_t size = tb_object_writ_to_data(object, (tb_byte_t*)info, sizeof(info), TB_OBJECT_FORMAT_JSON | TB_OBJECT_FORMAT_DEFLATE);if (size > 0){// strip string: ""tb_char_t* show = info;if (info[0] == '\"' && info[size - 1] == '\"'){show++;info[size - 1] = '\0';}// tracetb_printf("%s\n", show);}}// exit objecttb_object_exit(root);}}else tb_option_help(option);}else tb_option_help(option);// exit optiontb_option_exit(option);}// exit tboxtb_exit();// okreturn 0;
}
简单吧,就只要一百行代码,还支持详细的命令行选项支持。
附带一句:其实jcat同时还可以支持解析xml和plist哦,因为他用了object模块的多数据格式探测功能,完全可以自动解析不同格式的数据,还能方便扩展自己的数据格式。
- TBOX项目详情
- TBOX项目源码
- TBOX项目文档
转载于:https://my.oschina.net/tboox/blog/361160
实现json解析工具jcat相关推荐
- 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)
Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...
- Json解析工具Jackson(使用注解)
接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解 @JsonIgnoreProperties ...
- JSON解析工具比较,主要GSON和FastJSON
转自:http://www.cnblogs.com/kunpengit/p/4001680.html 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的 ...
- Java:JSON解析工具-org.json
一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...
- 自定义Json解析工具
此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...
- json解析工具(json解析工具 python)
常用的xml,json解析工具有哪些 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可 ...
- Java常用的几种JSON解析工具
一.Gson:Google开源的JSON解析库 1.添加依赖 <!--gson--> <dependency><groupId>com.google.code.gs ...
- FastJson快速上手【Json解析工具】
目录 一.spring boot工程中引入FastJson依赖 二.调用JSON类的静态方法直接进行json序列化和反序列化 2.1 序列化 2.2 反序列化 三.快速演示: 四.思考 五.web案例 ...
- java 自定义json解析注解 复杂json解析 工具类
java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...
最新文章
- Chrome插件HostAdmin
- 字节跳动Deep Retrieval召回模型笔记
- 排列、组合问题(递归)
- MySQL Mac安装教程
- python的模块提供了许多文件处理方法_详解使用Python处理文件目录的相关方法
- bzoj3533 [Sdoi2014]向量集 可持久化凸包+二分
- 如何在矩池云内置Jupyter中访问网盘中的文件呢?
- C#中WinForm 父窗体和子窗体传值
- Python: 生成器,yield
- Linux串口(serial、uart)驱动程序设计
- 【雷达通信】基于matlab粒子群算法优化综合微带天线阵列方向图【含Matlab源码 1967期】
- 计算机网络按网络覆盖范围大小排序 从小到大为,现代远程网络教育概论试题及答案分析.pdf...
- 动态规划(Dynamic Programming)算法与LC实例的理解
- OpenCV4学习笔记(59)——高动态范围(HDR)成像
- 淘宝直通车如何打造爆款,直通车爆款秘籍
- Xshell 下载地址
- SOCKET实现广播(BoardCast)的发送和接收 (转)
- 利用tldr工具再也不怕记不住Linux命令
- 数字电路和模拟电路-3二极管与三极管、基本逻辑运算
- 中国电信推出量子加密通话;中国建成世界最大量子通信网络|全球量子科技与工业快讯第四期