博客
关于我
帆软报表自定义函数-取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/

    你可能感兴趣的文章
    nodejs 运行CMD命令
    查看>>
    nodejs-mime类型
    查看>>
    nodejs中Express 路由统一设置缓存的小技巧
    查看>>
    nodejs包管理工具对比:npm、Yarn、cnpm、npx
    查看>>
    NodeJs单元测试之 API性能测试
    查看>>
    nodejs图片转换字节保存
    查看>>
    NodeJs学习笔记001--npm换源
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>
    nodejs端口被占用原因及解决方案
    查看>>
    Nodejs简介以及Windows上安装Nodejs
    查看>>
    nodejs系列之express
    查看>>
    nodejs系列之Koa2
    查看>>
    Nodejs连接mysql
    查看>>
    nodejs连接mysql
    查看>>
    NodeJs连接Oracle数据库
    查看>>
    nodejs配置express服务器,运行自动打开浏览器
    查看>>
    Nodemon 深入解析与使用
    查看>>
    node不是内部命令时配置node环境变量
    查看>>
    node中fs模块之文件操作
    查看>>