在Java中辅助报表工具展现json

  JSON是半结构化数据,Java和报表工具只提供了简单解析的类库,很难进行深度计算。而使用集算器可降低JSON的计算难度。报表工具可将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果,详情参考集算器辅助报表工具的应用过程

  下面举例说明报表工具呈现JSON时常见的难题,以及集算器对应的解法。

  JSON分组汇总

  order.json存储着订单记录,现在要按时间段汇总每个月每个客户贡献的销售额,部分源数据如下:

 

  集算器代码:


 

  将JSON文件读为二维表,进行性条件查询,再进行分组汇总,其中argBegin、argEnd是报表参数。结果如下:


 

用列表呈现手机日志

  文件cellphone.log是JSON格式的手机日志,其中general和ping字段是子文档,分别有一条记录,cap_main字段也是子文档,有多条记录,现在需要用列表呈现cap_main,每条记录附加general的mtmodel 、networktype字段,以及ping的ssid字段。

  源数据如下:


 

  集算器代码:


 

  集算器读入JSON文件后,将保持其多层结构,并可用句号延多层结构访问字段。函数derive表示增加计算列。计算结果如下:


 

报表查询JSON多层子文档

  jsonstr.json的runners字段是子文档,子文档有3个字段:horseId、ownerColours、trainer,其中trainer含有下级字段trainerId。报表需要根据文档序号展现对应子文档的horseId、ownerColours、trainerId字段。

  源数据如下:


 

  集算器代码:


 

  读入JSON文件,按序号取出对应文档的runner字段(子文档),再从runner取出需要的字段,其中trainerId来自下级子文档。A3就是报表需要的数据,如下:


 

多层JSON分组表

  Cells.json是个多层嵌套的json文件,报表需要将其展示为分组表,分组字段为name、type、image. “xlink:href”,明细字段分为3个部分:custom. Identifier、custom. Classifier、custom. Output,这3部分都是结构相同的子文档,但文档数不同。

  源数据:


 

  集算器代码:


 

  集算器可将3种子文档合并在1个二维表中,用新字段ctype来区分,再将分组字段加入二维表,形成典型的“主子连接表”。合并后A2如下:


 

  根据集算器的计算结果,报表很容易就可以设计出分组表。

多个子报表不同JSON

  一张报表含有多个子报表,主报表和每个子报表使用不同的JSON文件,部分源数据如下:


 

  对于Jasper、Birt等单源报表工具,需要用JAVA类将多源数据统一为单源,集算器只需书写简单脚本:


 

  读入JSON并取出第1个字段,“.#1”表示第1个字段。给参数argFileName赋予不同的文件名,报表将会收到不同的数据集,如下:


 

连接txt和JSON

  structure.txt是tab分割的结构化文本,json.txt是非结构化的JSON串,structure.txt的第2列和json.txt的部分文本存在外键关系。部分数据如下:

  structure.txt


 

  Json.txt


 

  需要用报表呈现上述连接关系,期望表样如下:


 

  集算器代码:


 

  读入JSON文件,取出必要的字段和子文档形成二维表,然后新增计算列。A3如下:


 

  之后读入本文文件,再和A3进行join运算,并取出需要的字段,形成最终结果A6,如下:


 

猜你喜欢

转载自datamachine.iteye.com/blog/2259608