对于JMP 14,我一直在锻炼新的 HTTP请求在JSL中找到的对象。 我遇到了这个API,在这里找到: http://api.citybik.es/v2/ 。
此Web服务可用于在全球范围内查找City Bike数据(和可用性)。 它只有两个端点 http://api.citybik.es/v2/networks 和 http://api.citybik.es/v2/networks/[id ] 所以这是一个非常简单的Rest API。 但关键是如何配置HTPP Request对象以发送到网站,然后如何处理该信息。 (处理信息可以像你想要的那样处理)
request = New HTTP Request(URL("http://api.citybik.es/v2/networks"), Method("Get"));
json = request << Send();
这是从第一个端点获取数据所需的全部内容。json是从API返回的数据。 由于我知道这个Web服务,我知道我应该返回的数据是Character,它是JSON我只是检查:
!IsEmpty(json)
但是,您可以检查是否成功,并返回mimetype:
request << Is Successful
request << Get Mime Type == "application/json"
从脚本创建的初始JMP数据表是City Bikes Network表。
它是从第一个端点返回的json数据创建的。 有[至少]两种方法可以处理返回的数据。 首先是:
JSON to Data Table(json)
这将尝试从数据创建JMP数据表。 对于“矩形”或“tabluar”数据,这非常有效(并且速度很快)。 但是,并非所有的Web服务都返回表格数据(City Bikes不是这样)。这带来了第二种处理返回数据的方法:
Parse JSON(json)
这将创建一个JSL关联数组。 这意味着您不必在JSL中自己解析JSON,但是您需要知道数据的结构。 那就是你需要知道它是否是一个键=> 值对或一把钥匙=> 值对。 这并不像看起来那么难,因为您可以捕获原始json输出,如:
write(json);
在日志中并将其粘贴到您最喜欢的json格式化程序中。(我在Chrome中使用JSON编辑器在线应用程序)。这意味着这样的事情:
{
"networks": [
{
"company": [
"Bike U Sp. z o.o."
],
"href": "/v2/networks/bbbike",
"id": "bbbike",
"location": {
"city": "Bielsko-Bia\u0142a",
"country": "PL",
"latitude": 49.8225,
"longitude": 19.044444
},
"name": "BBBike"
},
...
...
}
可以这样:
object {1}
networks {560}
0 {5}
company [1]
0 : Bike U Sp. z o.o
href: /v2/networks/bbbike
id: bbbike
location {4}
city: Bielsko-Biaia
country: PL
latitude: 49.8225
longitude: 19.044444
name: BBBike
...
...
换句话说,当你看到一个 [...] 在JSON Editor Online中,您正在处理JSL数组。 当你看到一个 {...} ,您正在处理JSL关联数组。
我想对脚本做的另一个注意事项是我使用:
Set Property("Event Handler", ...
所以我可以深入到下一个端点。
当我点击公司专栏中的超链接时,我使用了 COMPANY_ID 在同一行中使用url构建新的HTTP请求:
"http://api.citybik.es/v2/networks/" || thisTable:company_id[iRow]
这使我可以获得有关City Bike公司的更多详细信息,并使用与以前相同的过程创建另一个JMP数据表。
我使用Graph Builder创建了几个示例表脚本,然后将它们嵌入到我的JSL中。
有很多很多Rest API,所以请随意尝试一下。
请享用,
布莱恩布恩