JSON API
快速导航
有时,您需要可视化不在关系数据库管理系统 (RDBMS) 或 NOSQL 数据存储中的数据,而是来自某些 HTTP API。对于这些情况,Redash 提供了 JSON
数据源(首次在 Redash v8 中引入)。
Redash 将来自 JSON
数据源的所有传入数据视为文本;因此,在呈现数据时,您应该准备好使用表格格式。
JSON 数据源类型
使用 JSON
数据源来查询任意 JSON API。设置很简单,因为不需要身份验证。任何 RESTful JSON API 都将通过 HTTP 标头处理身份验证。因此,只需创建一个新的 JSON
类型的数据源,并将其命名为您喜欢的名称(“JSON”是一个不错的选择)。
Redash 将检测 JSON 支持的数据类型(如数字、字符串、布尔值),但其他类型(主要是日期/时间戳)将被视为字符串(除非以 ISO-8601 格式指定)。
用法
此数据源使用 YAML 格式的查询。以下是一些使用 GitHub API 的示例
从端点返回对象列表
url: https://api.github.com/repos/getredash/redash/issues
这将按原样返回上述 API 调用的结果。
返回单个对象
url: https://api.github.com/repos/getredash/redash/issues/3495
上面的 API 调用返回一个单个对象,并且此对象正在被转换为行。
返回特定字段
如果您只想从结果对象中选择特定字段,则可以传递 fields
选项
url: https://api.github.com/repos/getredash/redash/issues
fields: [number, title]
返回内部对象
许多 JSON API 返回嵌套对象的数组。您可以使用 path
键访问数组中的对象。
url: https://api.github.com/repos/getredash/redash/issues/3495
path: assignees
上面的查询将使用 API 结果中的 assignee
对象作为查询结果。
传递查询字符串参数
您可以自己制作 URL,也可以传递 params
选项
url: 'https://api.github.com/search/issues'
params:
q: is:open type:pr repo:getredash/redash
sort: created
order: desc
以上与以下相同
url: 'https://api.github.com/search/issues?q=+is:open+type:pr+repo:getredash/redash&sort=created&order=desc'
其他 HTTP 选项
您可以传递其他键来修改各种 HTTP 选项
method
- 要使用的 HTTP 方法(默认值:get
)headers
- 要随请求发送的标头字典auth
- 基本身份验证用户名/密码(应作为数组传递:[username, password]
)params
- 要添加到 URL 的查询字符串参数字典data
- 用作请求主体的数值字典json
- 与data
相同,只是它被转换为 JSON
URL 数据源类型
URL
数据源类型已弃用。您仍然可以使用使用此类型创建的现有数据源,但您无法创建新的数据源。我们建议迁移到 JSON 数据源类型。URL
数据源期望您的端点返回具有特殊数据结构的 JSON(请参见下文)。
用法
您的查询主体将仅包含返回数据的 URL,例如
http://myserver/path/myquery
要操作数据(筛选、排序、聚合等),您可以使用查询结果数据源。
所需的数据结构
返回的对象必须公开两个键:columns
和 rows
。
-
columns
键应公开一个 JavaScript 对象数组,描述要包含在您的数据集中的列。每个对象将包含三个键name
type
friendly_name
-
rows
应返回一个 JavaScript 对象数组,表示每行数据。每个对象的键应与您的columns
数组中描述的name
键匹配。
以下数据类型支持用于列
- text
- integer
- float
- boolean
- string
- datetime
- date
返回数据的示例如下
{
"columns": [
{
"name": "date",
"type": "date",
"friendly_name": "date"
},
{
"name": "day_number",
"type": "integer",
"friendly_name": "day_number"
},
{
"name": "value",
"type": "integer",
"friendly_name": "value"
},
{
"name": "total",
"type": "integer",
"friendly_name": "total"
}
],
"rows": [
{
"value": 40832,
"total": 53141,
"day_number": 0,
"date": "2014-01-30"
},
{
"value": 27296,
"total": 53141,
"day_number": 1,
"date": "2014-01-30"
},
{
"value": 22982,
"total": 53141,
"day_number": 2,
"date": "2014-01-30"
}
]
}