span8
span4
本文将介绍如何读取JSON数据。FME有几种方法可以将JSON数据读取到工作区中。每个都有不同的场景,在这些场景中它们更有用。有些是JSON的规范,有自己的阅读器格式,包括GeoJSON、Esri JSON和IMDF,总结如下表:
方法 |
常见的场景 |
教程 |
JSON读者 |
从已知的文件路径或URL读取JSON |
这个页面 |
功能阅读器 |
在翻译过程中从已知或基于属性的文件路径或URL读取JSON |
教程:featureereader Transformer |
JSON转换器(JSONExtractor, jsonflater和JSONFragmenter) |
将JSON直接从文件路径或URL读取到转换器中,控制如何将其转换为FME特性 |
使用JSONExtractor, jsonflater和JSONFragmenter转换JSON |
HTTPCaller |
从API调用中读取JSON |
教程:入门api |
GeoJSON读者 |
您的源JSON数据遵循GeoJSON规范 |
GeoJSON读/写文档 |
Esri JSON读者 |
您的源JSON数据遵循Esri JSON规范 |
Esri-JSON读/写文档 |
IMDF读者 |
源JSON数据遵循IMDF GeoJSON规范 |
IMDF读/写文档 |
本文展示了如何使用JSON阅读器将JSON直接读取到工作区中。它显示了两种不同的阅读器模式扫描模式:自动和JSON查询。对于其他场景,请参见上面的链接。
在本教程中,我们将访问FAA机场状态Web服务API。您可以访问SwaggerHub的API文档.
FAA-airport-status-example.json是在API不可用的情况下提取的数据样本。
请注意:如果这个API的URL改变了,你可以只查看附加的示例数据。
1.从URL查看JSON数据
让我们先看看我们的源JSON数据。示例数据包含关于美国机场的状态信息,包括当前可见性和天气等属性。我们想要读取旧金山机场(代码SFO)的实时数据,可从:
https://soa.smext.faa.gov/asws/api/airport/status/SFO
如果在浏览器中打开这个URL,您将看到接收到一个XML响应,因为该API默认提供XML。如果想要接收JSON,就必须在HTTP报头中请求它。
2.查看带有报头的HTTP请求JSON数据
我们可以在浏览器中用请求JSON的报头发出正确的HTTP请求SwaggerHub,这是美国联邦航空局用来设计和记录其API的API平台。
去医院API的getAirportStatus操作SwaggerHub. 然后:
单击“Try it Out”按钮,该按钮允许您为getAirportStatus操作提供参数。
在机场代码参数字段中键入“SFO”。
点击“Execute”按钮,它将使用输入的参数发出一个API请求。注意,“响应内容类型”的默认值是“application/json”,这意味着这个API请求将提供一个请求json的报头作为响应。
点击“Execute”后,你会看到一些JSON出现在HTTP 200代码的响应体下面:
这个JSON是我们将在练习中使用的关于SFO状态的数据。它应该是这样的:
{“名称”:“旧金山Intl”、“城市”:“旧金山”,“状态”:“CA”、“ICAO”:“KSFO”、“国际航空运输协会”:“旧金山”、“SupportedAirport”:真的,“延迟”:假的,“DelayCount”:0,“状态”:[{“原因”:“不知道这个机场延误”}],“天气”:{“天气”:[{“临时”:“公平 " ] } ], " 可见性:[10],“元”:[{“信用”:"NOAA's National Weather Service", "Url": "http://weather.gov/", "Updated": "Last Updated on october 9, 6:56 am PDT"}], "Temp": ["53.0 F (11.7 C)"“风”:[“西风11.5”]}}
JSON代码示例
1.打开FME工作台,添加一个JSON阅读器
单击“阅读器>添加阅读器”。选择JSON (JavaScript对象符号)作为格式。
2.选择要读取的数据集
您可以为Dataset参数提供一个本地文件的路径(在上面的下载部分提供示例)或URL。
本文假设您使用的是URL。粘贴https://soa.smext.faa.gov/asws/api/airport/status/SFO进入“数据集”参数。虽然我们知道这个URL用XML响应,但是当使用JSON Reader时,FME将自动包含请求JSON的正确报头。
单击Parameters按钮。通过设置JSON阅读器参数,可以控制FME如何将JSON的嵌套结构转换为特性。模式扫描模式有两个选项:自动和JSON查询。自动模式简单地获取JSON父属性并将其转换为FME属性,并将其余嵌套结构转换为FME列表属性。JSON查询模式(我们将在本文后面介绍)允许您编写一个JSON查询,以选择您希望将JSON数据结构的哪一部分用作定义FME属性的顶层。
现在,请确保架构扫描模式设置为自动:
单击OK。
你的添加阅读器对话框应该是这样的:
单击OK。
3.运行工作空间
确保已启用功能缓存,然后单击“运行”按钮运行工作区并创建JSON数据的本地功能缓存。
4.使用可视化预览检查JSON
单击JSON阅读器功能类型(或其绿色缓存图标)以使用VisualPreview的表视图进行检查。您应该看到,JSON数据已经扁平化为一个表,所有顶级JSON属性都变成了FME属性:名称、城市、州等。
您会注意到没有包含子属性,如“Status”和“Weather”。这些属性在FME功能上仍然可用,但由于JSON的嵌套结构,它们被读取为列表。
注意:如果您以前没有使用过FME中未公开的属性或列表,那么使用JSON可能会很有挑战性。你可以阅读使用列表属性以快速介绍这些主题。
5.在“功能信息”窗口中查看功能
要找到这些未公开的属性,请单击表视图中的单个特性来选择它。然后在视觉预览中查看功能信息窗口。您可以看到所有带有子属性的属性都以列表的形式存储在特性中。他们使用点符号它们的子元素是属性和FME列表括号符号,其中数组中有多个属性-值对:
在本文的下一部分中,您将了解如何更改JSON结构成为FME特性的方式。
1.更改JSON Reader Schema Scan Mode为JSON Query
现在让我们尝试使用JSON查询读取JSON。
在Navigator窗口中展开JSON阅读器,然后是Parameters,然后双击Schema Scan Mode:
2.创建JSON查询
要构造一个JSONQuery:
“模式扫描模式”设置为“JSON查询”。
在Feature Type下的表格中,键入“Weather”。
然后单击“查询”下的空格并单击[…]按钮。此按钮打开JSON数据的嵌套结构,可用于构建查询。
单击包含嵌套列表对象的箭头。从列表中选择Weather;Query将显示json["Weather"]。
单击OK:
3.运行工作空间
运行工作区,然后检查新特性缓存。表视图将报告数据没有模式,但使用特性信息窗口显示列表属性。只包含天气的子数据,不包括机场、城市等父数据:
上一篇文章:
下一个文章:
从JSON转换为空间格式(GIS)
JSON阅读先进
JSON写作概述
使用JSONTemplater编写JSON
数据属性
本文使用的数据来自联邦航空管理局的机场状态Web服务(ASWS) API,这是许可的知识共享0 (CC0).
©2020 S亚搏在线afe Software Inc |法律