反馈已提交

网络繁忙

JSON 数据集插件

  • 文档创建者:漩涡
  • 历史版本:64
  • 最近更新:Carly 于 2023-07-18
  • 1. 概述

    1.1 版本

    报表服务器版本
    JSON数据集插件
    11.0V9.5.7
    11.0.8V9.5.8
    11.0.10V9.5.9

    1.2 应用场景

    随着 JavaScript 的流行,JSON 格式的数据也被越来越广泛的使用。使用 JSON 数据集插件可以将 JSON 格式的数据转变为报表中可以使用的数据表。

    1.3 语法规则

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

    注:JsonPath语法内写参数的方法,与普通数据集一致。

    1.4 方案对比

    对比项当前方案新方案
    方案简介本文方法,在 FineReport 中下载「JSON 数据集」插件实现

    本文不做介绍

    使用 FineDataLink 产品 中的「JSON 解析」算子实现

    主要实现过程

    需要提前学习 JSON 查询的语法

    创建 JSON 数据集后,输入查询语句,取出数据

    使用本文示例数据源取出 category 列的数据

    33.png


    「JSON 解析」算子中,无需输入查询语句,直接可视化选择节点即可

    使用本文示例数据源取出 category 列的数据

    34.png

    JSON 数据来源:选择要解析的 JSON 格式数据,示例选择:store.book

    29.png

    选择 JSON 节点:选择要解析的 JSON 节点,示例选择:category

    35.png

    2. 安装插件

    点击下载插件:JSON数据集

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

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

    3. JSON数据集

    3.1 定义 JSON 数据连接

    安装插件后,设计器菜单栏选择服务器>定义数据连接,新建一个 JSON 数据连接,命名为 JSON 。

    输入链接地址http://fine-doc.oss-cn-shanghai.aliyuncs.com/book.json,并按如下图所示配置好其他设置项,点击「确定」。如下图所示:

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

    20.png

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

       设置项  含义
    地址

    用于输入json文本的请求地址(支持 HTTP 和非自签名 SSL 证书的 HTTPS

    地址支持参数,和数据集一样,注意提供一个默认参数供设计的时候查询用;

    地址支持除报表函数和单元格计算以外的所有公式;

    注:建议用户获取参数时使用单纯的接口链接,「 .json 文件」形式不能传参。

    用户名密码用于输入认证信息,允许为空,仅支持Authorization:Basic Base64(username:password)形式的认证
    缓存有效期

    用于设置缓存的有效期,单位毫秒,默认为0,表示不缓存;

    设置缓存时间后,将在首次连接后进行缓存(支持集群),缓存有效期内读取的结果均为缓存内容,不随请求接口数据变化而变化

    请求类型用来设置不同的请求类型,并根据不同的请求类型进行传参设置

    请求类型默认为 GET,可修改为 POST_FROM 及 POST_RAW ,关于请求类型的介绍可参见本文 3.3 节。

    普通参数

    普通参数即放在 Body 中的,通常说的 GET 和 POST 即普通参数

    普通参数支持参数的增删改,并可通过刷新按钮直接刷新出请求地址中设置的参数(此时将用刷新出的参数覆盖原有的参数设置)

    头参数

    头参数即放在 Header 中,常用不变的量一般都是走 header, 因为每次请求都带 header

    请求头参数仅支持手动增删改,公式支持除报表函数和单元格计算以外的所有公式

    编码如果文件是非 UTF-8 编码的,就需要在原始编码这一栏选择对应的编码,否则无法正确的解析文本信息

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

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

    3.2 JSON数据集取数

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

    3.2.1 取出所有数据

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

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

    Snag_243e41d3.png

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

    Snag_243fda36.png

    • 键排序:是指对获取出来的列名做排序,默认即为不开启(如果是不完整的json结构,需要同时开启预读列名才有效)

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

    3.2.2 取其中某一列

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

    Snag_24500976.png

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

    Snag_245011b3.png

    3.2.3 条件取数

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

    1.png

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

    2.png

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

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

    3.3 传参方式介绍

    传参方式区别

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

    注1:建议用户获取参数时地址使用单纯的接口链接,「 .json 」文件形式不支持传参。

    注2:在决策报表中,如果希望JSON数据连接和控件联动,必须在JSON数据集中添加和JSON数据连接中同名的参数(即使用不上这个参数)。

    注3:JSON数据集传参,参数值必须为固定值,而不可以是另一个参数,例如fine_username等。

    3.3.1 GET 传参

    创建 json 连接,请求类型选择「GET」,在 json 文本的请求地址后面加上添加参数,如下图所示:

    21.png

    添加「json」数据集,输入查询语句,返回参数 book 对应的数据,如下图所示:

    22.png

    3.3.3 POST_FORM 传参

    创建 JSON 数据连接,请求类型选择「POST_FORM」。在地址处输入对应的 json 文本接口链接,并手动添加普通参数。如下图所示:

    23.png

    添加「json」数据集,输入查询语句,返回参数 book 对应的数据,如下图所示:

    24.png

    3.3.4 POST_RAW 传参

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

    创建 JSON 数据连接,请求类型选择「POST_RAW」。在地址处输入对应的 json 文本接口链接。如下图所示:

    25.png

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

    26.png

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

    27.png

    4. JSON程序数据集

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

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

    4.1 新建JSON程序数据集

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

    222

    4.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 遍历数组方法

    4.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

    4.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。

    5. 效果预览

    JSON数据集示例1.cpt:

    Snag_2472267e.png

    JSON数据集示例2.cpt:

    Snag_2472ed49.png

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

    6. 已完成模板

    附件列表


    主题: 数据准备
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持