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

Java嵌入脚本怎么快速解析多层 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<Map<String, String>> list = new ArrayList<Map<String, String>>();

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

                 two = twos.getJSONObject(i);

                 Map<String, String> map = new HashMap<String, String>();

                 ...

                 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的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注蜗牛博客行业资讯频道,感谢各位的阅读!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram