历史版本22 :JSON 数据集插件 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1. 描述编辑
随着 JavaScript 的流行,JSON 格式的数据也被越来越广泛的使用,但是由于 JSON 格式的灵活性,把这类数据结构和其他数据一起分析的时候,就会面临结构不统一导致无法分析的问题,在帆软报表中是没有办法直接使用的。
2. 解决方案编辑
帆软市场提供 JSON数据集插件
3. 安装插件编辑
4. 使用教程编辑
4.1 新建数据连接
打开设计器的服务器->定义数据连接菜单,可以添加一个 JSON 数据连接,输入链接地址,如下:
含义 | |
---|---|
地址 | 地址可以支持参数,和数据集一样,注意提供一个默认参数供设计的时候查询用。 |
用户名 密码 | 输入用户名和密码进行认证,不需要认证就不填写 |
请求类型 | GET模式和POST模式的参数传递方式不一样,GET是拼接到URL上,POST是放到HTTP请求体中,并且POST模式的参数需要自己添加。 |
普通参数 | 普通参数 |
头参数 | 常用不变的量一般都是走header, 因为每次请求都带header |
编码 | 如果文件是非utf-8编码的,就需要在原始编码这一栏选择对应的编码,否则无法正确的解析文本信息。 |
4.2 新建 JSON 数据集
在模板中添加 JSON 数据集,如下图:
选择上面新建的数据连接,输入查询语句,可以获取到 JSON 中的数据
比如下面的示例就是查询书店中所有的书信息:
键排序:是指对获取出来的列名做排序。
预读列名:先遍历所有的数据,把列名获取出来,可用于 JSON 结构不整齐的情况,会稍微的降低效率。
4.3 新建JSON程序数据集
注: JAR 需要使用 2019-3-13 及以后,插件版本需要 9.2.3 及以后
使用 JavaScript 脚本,将JSON对象转换为二维表。这种方式可以解决所有不能直接用 JSON 数据集的场景,可以根据用户自己的数据结构定制脚本,从而实现和报表的对接。
在模板中添加 JSON 数据集,如下图:
选择上面新建的数据连接,输入脚本,可以获取到数据
比如查询所有书籍的信息:
内置函数和变量 | 含义 |
---|---|
$ | 表示 JSON 内容的对象 |
unique(array) | 将数组进行去重,主要用于列名处理 |
console.log(info) | 输出调试信息,会在日志文件中输出 INFO 级别的信息 |
console.error(err) | 输出错误级别的信息,会在日志文件中输出 ERROR 级别的信息 |
merge(table, column) | 合并数据集的内容和列名对象 |
5. 示例编辑
5.1 新建数据连接
JSON 文件地址:http://fine-doc.oss-cn-shanghai.aliyuncs.com/book.json,用户名密码为空
5.2 新建 JSON 数据集
分别使用不同的查询语句:
1)带参数的查询
2)价格小于 10 的书籍
$.store.book[?(@.price<10)]
3)所有书籍作者的集合
$.store.book[*].author
注:更多的查询语法规则,参见:https://github.com/richie2008/JsonPath
注:键值对顺序不一致可能造成数据错乱,可以开启预读列名
5.3 新建 JSON 程序数据集
1)所有书籍
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));
2)价格小于 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));
3)所有书籍的作者集合
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);