JSON 数据集插件

  • 文档创建者:漩涡
  • 编辑次数:39次
  • 最近更新:Wendy123456 于 2020-10-15
  • 1. 概述

    1.1 版本说明

     报表服务器版本JAR 包版本 插件版本 
    10.02019-10-25V9.3.5
    9.02017-01-01V9.1.1
    8.02017-01-01V9.1.1

    1.2 插件安装

    点击下载插件:JSON数据集

    设计器插件安装方法参照 设计器插件管理

    服务器安装插件方法参照 服务器插件管理

    1.3 应用场景

    随着 JavaScript 的流行,JSON 格式的数据也被越来越广泛的使用,但是由于 JSON 格式的灵活性,把这类数据结构和其他数据一起分析的时候,就会面临结构不统一导致无法分析的问题,在 FineReport 报表中是没有办法直接使用的。该插件可以将 JSON 格式的数据转变为报表中可以使用的数据表。

    1.4 语法规则

    JSON 查询的详细语法规则参见文档:JsonPath

    2. JSON数据集

    2.1 定义 JSON 数据连接

    安装插件后,设计器菜单栏选择服务器>定义数据连接,新建一个 JSON 数据连接,命名为 JSON3 ,输入链接地址 http://fine-doc.oss-cn-shanghai.aliyuncs.com/book.json,并按如下图所示配置好其他设置项,点击确定。如下图所示:

    注:请求地址返回的文本信息,只要是 JSON 格式的文本即可。

    1578385648300116.png

    设置项的详细说明如下图所示:

       设置项  含义
    地址地址可以支持参数,和数据集一样,注意提供一个默认参数供设计的时候查询用
    用户名密码输入用户名和密码进行认证,不需要认证就不填写
    请求类型     GET 模式和 POST 模式的参数传递方式不一样,GET 是拼接到 URL 上,POST 是放到 HTTP 请求体中,并且POST 模式的参数需要自己添加
    缓存有效期默认缓存时间为 0 ,表示不启用,且支持集群,可以有效的提升 JSON 数据集的效率
    注:V9.3.3 版本插件支持。
    普通参数普通参数即放在 Body 中的,通常说的 GET 和 POST 即普通参数
    头参数头参数即放在 Head 里面的。常用不变的量一般都是走 header, 因为每次请求都带 header
    编码  如果文件是非 UTF-8 编码的,就需要在原始编码这一栏选择对应的编码,否则无法正确的解析文本信息

    注1:V9.3.3 版本的插件,脚本引擎支持自主选择 JavaScript V8 或者 Java(默认),在无法支持 JavaScript V8 的机器上自动使用 Java 版本的脚本引擎。

    注2:添加参数类型取决于用户服务器需要接收什么类型的参数。

    注3:建议用户获取参数时使用 .json 文件而不是单纯的接口。

    2.2 新建JSON数据集

    设计器新建 JSON 数据集,如下图所示:
    222

    2.3 取出所有数据

    点击新建好的 JSON 数据集编辑按钮,输入查询语句,即可获取到 JSON 中的数据。查询语句栏输入$.store.book[*],查询出书店中所有的书信息,如下图所示:

    注:$.store.book[*] 是 JSON 的固定引用方式,代表取出 store 下 book 的全部数据。

    Snag_243e41d3.png

    点击预览按钮,查看取出来的 JSON 数据。

    Snag_243fda36.png

    • 键排序:是指对获取出来的列名做排序。默认即为不开启。

    • 预读列名:先遍历所有的数据,把列名获取出来,可用于 JSON 结构不整齐的情况,会稍微的降低效率。默认即为不开启。

    2.4 取其中某一列

    查询语句栏输入$.store.book[*].category,取出 category 列的数据。

    Snag_24500976.png

    点击预览按钮,查看取出来的 JSON 数据。

    Snag_245011b3.png

    2.5 条件取数

    查询语句栏输入$.store.book[?(@.price<10)]取出价格小于 10 的书籍。

    1.png

    点击预览按钮,查看取出来的 JSON 数据。

    2.png

    注1:键值对顺序不一致可能造成数据错乱,可以开启预读列名。

    注2:已完成模板参见下面的 JSON 数据集示例1.cpt。

    2.6 传参方式介绍

    2.6.1 传参方式区别

    模式传递方式
    GET拼接到 URL 上
    POST_FORM需要传的是 key-value,可以添加动态参数
    POST_RAW只要 value 就可以了,可以添加动态参数

    2.6.2 无参数

    JSON 数据集中不设置任何参数,如下图所示:

    1.png

    预览时,不会返回节点值,如下图所示:

    2.png

    2.6.3 GET 传参

    定义一个参数num,值为book,请求方式选中GET,传参时将参数拼接到 URL 后面:http://127.0.0.1:8080/Json_Test/Refresh?val=${num},如下图所示:

    1.png

    预览时,返回参数 book 对应的数据,如下图所示:

    4.png

    2.6.4 POST_FORM 传参

    定义一个普通参数num,值为book,请求方式选择POST_FORM,如下图所示:

    2.png

    预览时,返回参数 book 对应的数据,如下图所示:

    8.png

    2.6.5 POST_RAW 传参

    由于 POST_RAW 传参需要手动指定参数,所以在 header 中,设置 Content-Type 为 application/json ,表示客户端告诉服务器实际发送的数据类型为 JSON 格式。

    使用固定参数时,只需要写入文本,如下图所示:

    21.png

    预览时,返回参数 book 对应的数据,如下图所示:

    2.png

    使用动态参数时,通过 ${} 进行动态传参,点击刷新按钮进行参数配置:

    Snag_66cf1b0a.png

    3. JSON程序数据集

    使用 JavaScript 脚本,将 JSON 对象转换为二维表。这种方式可以解决所有不能直接用 JSON 数据集的场景,可以根据用户自己的数据结构定制脚本,从而实现和报表的对接。

    注: 新建和使用 JSON 程序数据集,设计器需要使用 2019-03-13 及以后版本的 JAR 包,插件需要更新到 9.2.3 及以后版本。

    3.1 新建JSON程序数据集

    设计器中新建 JSON 程序数据集,如下图所示:

    222

    3.2 取出所有数据

    点击新建好的 JSON 数据集编辑按钮,输入下图中的脚本代码,即可获取所有书籍的数据。

    脚本代码:

    var books = $.store.book;
    var rowCount = books.length;
    console.log("行数为:" + rowCount);
    var table = [];
    var column = [];
    books.forEach(function(value, index) {
        var row = [];
        for (var key in value) {
            row.push(value[key]);
            column.push(key);
        }
        console.log("该行共有" + row.length + "列");
        table.push(row);
    });
    return merge(table, unique(column))

    Snag_2460a28b.png

    点击预览按钮,查看取出来的 JSON 数据。

    Snag_2460b6de.png

    脚本中内置函数和变量的说明如下表所示:

     内置函数和变量  含义
      $  表示 JSON 内容的对象
      unique(array)  将数组进行去重,主要用于列名处理
      console.log(info)  输出调试信息,会在日志文件中输出 INFO 级别的信息
      console.error(err)  输出错误级别的信息,会在日志文件中输出 ERROR 级别的信息
      merge(table, column)  合并数据集的内容和列名对象
      books.forEach
      JS 遍历数组方法

    3.3 条件取数

    脚本编辑框中如下脚本代码,取出价格小于 10 的书籍数据。

    var books = $.store.book;
    var rowCount = books.length;
    var table = [];
    var column = [];
    books.forEach(function(value, index) {
        var row = [];
        if (value.price < 10) {
          for (var key in value) {
            row.push(value[key]);
            column.push(key);
          }
          table.push(row);
        }
    });
     
    return merge(table, unique(column));

    Snag_24695d0b.png

    点击预览按钮,查看取出来的 JSON 数据。

    2.png

    3.4 取出其中某一列

    脚本编辑框中如下脚本代码,取出所有书籍的作者集合。

    var books = $.store.book;
    var rowCount = books.length;
    var table = [];
    var column = ["author"];
    books.forEach(function(value, index) {
        var row = [];
        row.push(value.author);
        table.push(row);
    });
     
    return merge(table, column);

    1.png

    点击预览按钮,查看取出来的 JSON 数据。

    2.png

    注:已完成模板参见下面的 JSON数据集示例2.cpt。

    4. 效果预览

    JSON数据集示例1.cpt:

    Snag_2472267e.png

    JSON数据集示例2.cpt:

    Snag_2472ed49.png

    注:PC 及其移动端效果一致,可依据实际需求选择对应的数据集。

    5. 已完成模板

    已完成模板可参见:

    %FR_HOME%\webapps\webroot\WEB-INF\reportlets\demo\other\JSON数据集示例1.cpt

    %FR_HOME%\webapps\webroot\WEB-INF\reportlets\demo\other\JSON数据集示例2.cpt

    点击下载模板:

    JSON数据集示例1.cpt

    JSON数据集示例2.cpt

    附件列表


    主题: 数据准备
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!