Java 嵌入脚本快速解析多层 json

 

关键词导读:多层Json  Java解析多层Json  计算Json

关于Json处理的开源包有很多,比如json-libjacksonGsonFastjsonGson是谷歌做的,功能强大;Fastjson是阿里巴巴做的,性能较快。具体用哪个,你开心就好。

Json解析出来一般都是为了再次计算,常见的这些开源包大多都对Json的读取与解析提供了丰富的接口,但是接下来如何把多层Json数据经过筛选、进行深入计算并展开成二维数据,供给其它服务使用,仍然需要复杂硬编码,一般还需要借助关系数据库(创建临时表,解析入库,再使用SQL对其二次运算等),这些步骤搞起来,就需要开发人员去头疼了。

比如要处理这么个场景:订单信息的Json数据分为两层: 第一层是国家和地区,第二层是明细数据。现在想要查询出中国华北地区2013年的订单。

部分源数据如下:

[{"COUNTRY":"China","AREA":"Northeast China","ORDERS":[

{"ORDER_ID":10252,"CUSTOMER_ID":"SUPRD","EMPLOYEE_ID":4, …},

{"ORDER_ID":10318,"CUSTOMER_ID":"ISLAT","EMPLOYEE_ID":8, …},

]},

{"COUNTRY":"China","AREA":"East China","ORDERS":[

{"ORDER_ID":10249,"CUSTOMER_ID":"TOMSP","EMPLOYEE_ID":6, …},

{"ORDER_ID":10251,"CUSTOMER_ID":"VICTE","EMPLOYEE_ID":3, …},

]},

]

期望Json结构化并过滤后的效果:

COUNTRY

AREA

ORDER_ID

CUSTOMER_ID

EMPLOYEE_ID

ORDER_DATE

China

North China

10402

ERNSH

8

2013-01-02

China

North China

10403

ERNSH

4

2013-01-03

China

North China

10404

MAGAA

2

2013-01-03

China

North China

10407

OTTIK

2

2013-01-07

Java解析的部分代码大概要写成这样:

...

JSONObject jsonObject = JSONObject.fromObject(orderstr);

JSONArray jsonArray = jsonObject.getJSONArray("COUNTRY");

...

JSONArray twos = jsonArray.getJSONArray("ORDERS");

JSONObject two = null;

List> list = new ArrayList>();

        for (int i = 0; i < twos.size(); i++) {

                 two = twos.getJSONObject(i);

                 Map map = new HashMap>();

                 ...

                 list.add(map);

                 }

...

 

如果有了集算器Json解析就会简单很多,它不仅把Json类库做了二次封装,实现同样的算法只需更少的代码,且精心设计了一套集合运算领域的函数库,以应对结构化后的各类运算,不再需要安装配置第三方数据库软件。比如上面从解析到过滤,只需4行就搞定了:

 

A

1

=json(file("orders.json").read())

2

=A1.select(COUNTRY=="China" && AREA.contain("North China"))

3

=A2.news(ORDERS;COUNTRY,AREA,${B1.ORDERS.fname().concat@c()})

4

=A3.select(year(ORDER_DATE)==2013)

其实还有很多情况用Java解析Json不太方便,甚至计算入库等需求,但用集算器SPL却很简单,感兴趣可以参考:JSON数据计算与入库

集算器还很容易嵌入到Java应用程序中,Java如何调用SPL脚本有使用和获得它的方法。

关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器