博客
关于我
帆软报表自定义函数-取json数据
阅读量:613 次
发布时间:2019-03-12

本文共 2057 字,大约阅读时间需要 6 分钟。

帆软报表支持,自定义Java函数完成JSON数据提取

问题背景

在项目中,单元格中的数据是JSON格式,需要通过自定义函数完成提取。这一功能需求的实现需要处理多层级的JSON结构,包括简单字段、数组和对象嵌套多层。

提取逻辑示例

以下是提取逻辑的一个示例:

JSONVAL('{"k1":"v1", "k2":["v21", "v22"], "k3":{"k31":"v31"}}', 'k1') → v1JSONVAL('{"k1":"v1", "k2":["v21", "v22"], "k3":{"k31":"v31"}}', 'k2', 0) → v21JSONVAL('{"k1":"v1", "k2":["v21", "v22"], "k3":{"k31":"v31"}}', 'k3', 'k31') → v31JSONVAL('[1, "2", {"k1":"v1"}]', 2, 'k1') → v1

上述示例展示了如何从复杂的JSON数据中提取需要的值。每个JSONVAL函数调用都支持路径参数,可以处理多层级结构。

技术实现

基于开源库Gson实现JSON解析和处理,将函数编写为MyEclipse插件的一部分。代码实现如下:

public class JSONVAL extends AbstractFunction {    private static final long serialVersionUID = 1L;    @Override    public Object run(Object[] arg) {        int paramLength = arg.length;        if (paramLength < 2 || arg[0] == null || arg[1] == null) {            return Primitive.ERROR_NAME;        }        try {            JsonParser parser = new JsonParser();            JsonElement jsonEle = parser.parse(arg[0].toString());            for (int i = 1; i < paramLength; i++) {                if (jsonEle.isJsonObject() && arg[i] instanceof String) {                    jsonEle = ((JsonObject) jsonEle).get(arg[i].toString());                } else if (jsonEle.isJsonArray() && arg[i] instanceof Integer) {                    jsonEle = ((JsonArray) jsonEle).get((Integer) arg[i]);                } else {                    return Primitive.ERROR_VALUE;                }            }            return jsonEle.getAsString();        } catch (Exception e) {            return Primitive.ERROR_VALUE;        }    }}

功能说明

  • 输入参数

    • jsonStr: 需要解析的JSON字符串
    • path: 提取路径(支持String和Integer参数)
  • 解析流程

    • 使用JsonParser解析jsonStr
    • 根据path逐级检索对应值
    • 支持多层级结构和数组索引
  • 返回值

    • 提取结果以字符串格式返回
    • 失败时返回Primitive.ERROR_VALUE
  • 示例应用

  • 提取嵌套对象中的字段:

    JSONVAL('{"message":"hello", "data":{"age":30}}', 'data', 'age') → 30
  • 从数组中选取特定索引的元素:

    JSONVAL('[1, 2, {"k1":"v1"}]', 1, 'k1') → v1
  • 处理混合类型数据:

    JSONVAL('{"isBoolean": true, "numberValue": 100, "_object": {"nestedKey":"value"}}', 'isBoolean') → true
  • 实施价值

    本实现基于开源库Gson,能够轻松支持JSON数据的快速解析和提取。通过自定义函数实现多层结构的数据提取,大大提升了报表处理的灵活性和效率,同时确保了数据的准确性和完整性。

    转载地址:http://roaxz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现辗转相除法算法(附完整源码)
    查看>>
    Objective-C实现边缘检测Canny(附完整源码)
    查看>>
    Objective-C实现近邻传播算法(附完整源码)
    查看>>
    Objective-C实现返回 Collatz 序列及其任意正整数的长度算法(附完整源码)
    查看>>
    Objective-C实现返回一个包含所有节点邻居的数组算法(附完整源码)
    查看>>
    Objective-C实现返回数字的二进制表示中使用的位数bitLength算法(附完整源码)
    查看>>
    Objective-C实现进度条(附完整源码)
    查看>>
    Objective-C实现通讯录管理系统(附完整源码)
    查看>>
    Objective-C实现通过临界区实现线程同步(附完整源码)
    查看>>
    Objective-C实现通过年月日得到改日为该年的第几天(附完整源码)
    查看>>
    Objective-C实现通过注册表生成注册程序( 附完整源码)
    查看>>
    Objective-C实现遍历FTP文件目录( 附完整源码)
    查看>>
    Objective-C实现遗传算法(附完整源码)
    查看>>
    Objective-C实现遗传算法(附完整源码)
    查看>>
    Objective-C实现遗传算法(附完整源码)
    查看>>
    Objective-C实现邻接表(附完整源码)
    查看>>
    Objective-C实现醉汉随机行走问题(附完整源码)
    查看>>
    Objective-C实现醉汉随机行走问题(附完整源码)
    查看>>
    Objective-C实现醉汉随机行走问题(附完整源码)
    查看>>
    Objective-C实现重载[ ](附完整源码)
    查看>>