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

    你可能感兴趣的文章
    npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
    查看>>
    npm start运行了什么
    查看>>
    npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
    查看>>
    NPM使用前设置和升级
    查看>>
    npm入门,这篇就够了
    查看>>
    npm切换到淘宝源
    查看>>
    npm前端包管理工具简介---npm工作笔记001
    查看>>
    npm发布自己的组件UI包(详细步骤,图文并茂)
    查看>>
    npm和yarn清理缓存命令
    查看>>
    npm和yarn的使用对比
    查看>>
    npm学习(十一)之package-lock.json
    查看>>
    npm安装crypto-js 如何安装crypto-js, python爬虫安装加解密插件 找不到模块crypto-js python报错解决丢失crypto-js模块
    查看>>
    npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
    查看>>
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm配置安装最新淘宝镜像,旧镜像会errror
    查看>>
    npm错误Error: Cannot find module ‘postcss-loader‘
    查看>>
    NPOI之Excel——合并单元格、设置样式、输入公式
    查看>>
    NPOI利用多任务模式分批写入多个Excel
    查看>>