语法解析工具JSONQuery、GoConfig、XLogMiner、jcstruct介绍

以下为你介绍的语法解析工具都可用在Linux系统上:JSONQuery(使用 Gson 解析 JSON)、GoConfig(Go 的配置文件解析扩展包)、XLogMiner(SQL 语法解析工具)、jcstruct(解析与反解析解决方案)。

1、JSONQuery(使用 Gson 解析 JSON)

JSONQuery —— 更简单的使用 Gson 解析 JSON。

解析一个字段只需一行代码,最多两行,支持不带双引号的非标准JSON。

例子:

@Test

public void Test() throws TypeNotMismatchException, FieldNotExistException {

String json = "" +

"{\n" +

"  \"errno\": 0,\n" +

"  \"errmsg\": 成功,\n" +

"  \"user\": \"{\\\"user_id\\\":643361255,\\\"user_name\\\":\\\"鹞之神乐\\\",\\\"user_sex\\\":1,\\\"user_status\\\":1}\",\n" +

"  \"comment_info\": [\n" +

"    {\n" +

"      \"tid\": \"5504460056\",\n" +

"      \"pid\": \"116776960983\",\n" +

"      \"cid\": \"116857893053\"\n" +

"    },\n" +

"    {\n" +

"      \"tid\": \"5504460056\",\n" +

"      \"pid\": \"116776960983\",\n" +

"      \"cid\": \"116858057626\"\n" +

"    },\n" +

"    {\n" +

"      \"tid\": \"5504460056\",\n" +

"      \"pid\": \"116776960983\",\n" +

"      \"cid\": \"116880757453\"\n" +

"    }\n" +

"  ],\n" +

"  \"data\": {\n" +

"    \"comment_list\": {\n" +

"      \"116776891765\": {\n" +

"        \"comment_num\": 3,\n" +

"        \"comment_list_num\": 4\n" +

"      },\n" +

"      \"116776960983\": {\n" +

"        \"comment_num\": 4,\n" +

"        \"comment_list_num\": 4\n" +

"      }\n" +

"    }\n" +

"  }\n" +

"}";

//获取根元素errno

JsonResult jsonResult = JSONQuery.select(json, "errno");

//获取根元素errno,并转换为int

int errno = jsonResult.getAsInt();

//获取根元素data中的comment_list

jsonResult = JSONQuery.select(json, "data > comment_list");

//正则过滤出属性数组,针对一部分拿对象当数组用的情况

jsonResult = JSONQuery.select(json, "data > comment_list > [\\d+]");

//获取数组指定位置的元素

jsonResult = JSONQuery.select(json, "comment_info > [2]");

//获取数组指定位置的元素 负数坐标

jsonResult = JSONQuery.select(json, "comment_info > [-1]");

//针对某个字符串属性的值又是个json字符串的情况

jsonResult = JSONQuery.select(json, "user > user_name");

//jsonResult作为参数替代json字符串

JsonResult data = JSONQuery.select(json, "data");

jsonResult = JSONQuery.select(data, "comment_list");

//将json字符串转换为JsonResult

jsonResult = JSONQuery.select(json, "");

jsonResult = JSONQuery.select(json, null);

// v0.2.5新增

//将选择结果反序列化为普通对象

Post post = JSONQuery.select(json, "comment_info > [2]", Post.class);

//将选择结果反序列化为普通对象数组

Post[] postArray = JSONQuery.select(json, "comment_info", Post[].class);

//将选择结果反射为泛型类型ListType type = new TypeToken>() {}.getType();

ListpostList = JSONQuery.select(json, "comment_info", type);

}

入门:

<dependency>

<!-- JSONQuery @ https://JSONQuery.kagura.me -->

<groupId>me.kagura</groupId>

<artifactId>JSONQuery</artifactId>

<version>0.2.6</version>

</dependency>

下载地址:https://gitee.com/Kagura/JSONQuery

2、GoConfig(Go 的配置文件解析扩展包)

golang的一个扩展包,用以方便的解析配置文件,目前很好的支持:xml、json、yaml、toml,也简单的支持:ini,但不推荐使用。

一个简单例子:

{

"Port": 8080,

"Instance": [

{

"Name": "gitbook",

"Path": "/gitbook",

"Cmd": ["ls", "ll"],

"User": "dingdayu"

}

]

}

实例:

type Instance struct {

Name string

Path string

Cmd []string

User string

}

配置:

type Config struct {

Port int

Instance []Instance

}

var conf Config

err := config.New("conf.json", &conf)

if err != nil {

fmt.Println(err.Error())

}

fmt.Println(conf)

安装:

go get github.com/dingdayu/golangtools/config

下载地址:https://gitee.com/dingdayu/golangtools

3、XLogMiner(SQL 语法解析工具)

XLogMiner 是从 PostgreSQL 的 WAL(write ahead logs) 日志中解析出执行的 SQL 语句的工具,并能生成出对应的 undo SQL 语句。

配置要求:

需要将数据库日志级别配置为 logical 模式, 并将表设置为 full 模式。例如,下面的语句将表 t1 设置为 full 模式:

alter table t1 replica identity FULL;

PG版本支持:

目前主要是在 PostgreSQL 9.5.x 上开发测试的,在 9.6 版本中仅做过简单验证。

编译安装:

1].将 xlogminer 目录放置到编译通过的 PG 工程的 "../contrib/" 目录下。

2].进入 xlogminer 目录。

3].执行命令:

make && make install

使用方法:

从 WAL 日志产生的数据库中直接执行解析。

1].创建xlogminer的extension

create extension xlogminer;

2].Add xlog日志文件

增加wal文件:

select xlogminer_xlogfile_add('/opt/test/wal');

注:参数可以为目录或者文件

3].Remove xlog日志文件

移除wal文件:

select xlogminer_xlogfile_remove('/opt/test/wal');

注:参数可以为目录或者文件

4].List xlog日志文件

列出wal文件:

select xlogminer_xlogfile_list();

5].执行解析

select xlogminer_start(’START_TIMSTAMP’,’STOP_TIMESTAMP’,’START_XID’,’STOP_XID’)

如果分析全部日志:

select xlogminer_start('null','null',0,0);

START_TIMESTAMP:指定输出结果中最早的记录条目,即从该时间开始输出分析数据;若该参数值为空,则以分析日志列表中最早数据开始输出;若该参数值指定时间没有包含在所分析xlog列表中,即通过分析发现全部早于该参数指定时间,则返回空值。

STOP_TIMESTAMP:指定数据结果中最晚的记录条目,即输出结果如果大于该时间,则停止分析,不需要继续输出;如果该参数值为空,则从START_TIMESTAMP开始的所有日志都进行分析和输出。

START_XID:作用与START_TIMESTAMP相同,指定开始的XID值。

STOP_XID:作用与STOP_TIMESTAMP相同,指定结束的XID值。

两组参数只能有一组为有效输入,否则报错。

6].解析结果查看

select * from xlogminer_contents;

7].结束 xlogminer 操作

该函数作用为释放内存,结束日志分析,该函数没有参数。

select xlogminer_stop();

使用限制:

本版本只解析DML语句,不处理DDL语句。

执行了删除表、truncate表、更改表的表空间、更改表字段的类型,这样的DDL语句后,发生DDL语句之前的此表相关的DML语句不会再被解析。

解析结果依赖于最新的数据字典。(举例:创建表t1,所有者为user1,但是中间将所有者改为user2。那解析结果中,所有t1相关操作所有者都将标示为user2)

wal日志如果发生缺失,在缺失的wal日志中发生提交的数据,都不会在解析结果中出现。

解析结果中undo字段的ctid属性是发生变更“当时”的值,如果因为vacuum等操作导致ctid发生变更,这个值将不准确。对于有可能存在重复行的数据,我们需要通过这个值确定undo对应的tuple条数,不代表可以直接执行该undo语句。

若没有将表设置为full模式,那么update、delete语句将无法被解析。(当然这很影响使用,下一版本就会对这个问题作出改进)

若没有将数据库日志级别设置为logical,解析结果会有无法预料的语句丢失。

执行了表字段drop的DDL语句后,发生DDL语句之前的这个字段相关的值都会被解析为encode('AD976BC56F',hex)的形式,另外自定义类型也会解析为这种形式。

只能解析与数据字典时间线一致的xlog文件。

下载地址:https://gitee.com/mirrors/xlogminer

4、jcstruct(解析与反解析解决方案)

语法解析工具JSONQuery、GoConfig、XLogMiner、jcstruct介绍

描述:基于配置解决java与C结构体解析与反解析的灵活方案。

功能说明:

基于spring框架开发。

对于结构体定义采用可视化XML配置,便于维护与调试,防止协议多次修改带来的麻烦。

所有关健解析操作都基于接口开发,有默认实现,也可以用于自定义实现,能满足所有特殊业务解析需求。

配置简单,使用方便、易上手。

下载地址:https://gitee.com/mirrors/jcstruct

注明

以上就是语法解析工具JSONQuery、GoConfig、XLogMiner、jcstruct的介绍内容,这些语法解析工具都能使用在Linux操作系统中。

栏目相关文章