Java 嵌入脚本快速解析多层 json
关键词导读:多层Json Java解析多层Json 计算Json
关于Json处理的开源包有很多,比如json-lib、jackson、Gson、Fastjson。Gson是谷歌做的,功能强大;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脚本有使用和获得它的方法。
关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器。