SPAN8.
SPAN4.
在FME,有很多方法来操纵JSON中提取所需的数据。在这篇文章中,我们将介绍三种不同的变压器和突出自己的用途:在JSONFlattener的JSONExtractor和JSONFragmenter。在第一个例子中,我们将提取从一个JSON API饲料天气信息MetaWeather使用jsonflattener和jsonextractor。在第二个示例中,我们将使用JSON文件将其分段为使用JSONFRAGMMENTER包含多个记录的单个属性。
源MetaWeather API通话:https://www.metaweather.com/api/location/9807/
源MetaWeather API调用文件:VancouverWeather.json
来源温哥华流量JSON:vantraffic.json.
我们将阅读从一个JSON消息MetaWeatherAPI使用HTTPCaller然后提取天气状况。这个例子将显示两种方法来创建从JSON消息的属性。首先,我们将采用扁平化的JSONFlattener揭露所有属性的JSON。其次,我们将使用JSONExtractor提取使用查询JSON的特定部分。
笔记:如果这个API的URL改变了,你可以使用附加的示例数据VancouverWeather.json反而。
1.从URL查看JSON数据
打开FME工作空间并启动空白工作区。将Creator Transformer添加到画布。
2.添加一个httpcaller变压器
单击Creator并添加一个HTTPCaller转换器。创建者将触发HTTPCaller从URL获取信息。在HTTPCaller参数中,为请求URL粘贴以下URL,并设置HTTP方法为GET:
https://www.metaweather.com/api/location/9807/
这个API调用是温哥华(位置9807);如果你想跟着你自己的城市这个例子中,你可以查找woeid然后替换URL末尾的数字字符串。您的对话框应该如下所示:
单击确定。
3.选择要保留的属性
我们只关心在保持从HTTPCaller的_response_body属性。在保留指定的变压器添加到HTTPCaller。在参数方面,设置的属性保持到_response_body,然后单击确定。
4.创建与JSONFlattener属性
为了访问单个属性,例如天气状态和温度,我们需要扁平化JSON。添加一个jsonflater转换器并为JSON文档选择_response_body。
现在,如果使用启用功能缓存的功能缓存运行工作区,请在视觉预览中选择单个功能。“功能信息”窗口显示_Response_Body具有许多未曝光属性(该金额将根据响应而变化),其中包含我们所需的所有信息:
该JSONFlattener流程有助亚搏在线于把所有的JSON值到FME属性。接下来的挑战变成选择哪些属性使用AttributeExposer暴露。
5.提取JSON以找到今天的天气状态名称
如果我们感兴趣的一个元素或属性,我们可以直接提取到使用JSONExtractor的属性,而不是扁平化与JSONFlattener的JSON。要了解今天的天气,我们将需要提取父元素和揭露子元素。一个JSONExtractor变压器连接到保留指定的,并在参数中,源JSON文档设置为_response_body然后设置目标属性到天气。对于JSON查询,输入:
json (" consolidated_weather "][0](“weather_state_name”)
此查询将提取名为consolidated_weather的父元素,然后提取阵列中的第一个元素(它为0),然后提取名称Weather_state_name的值。此API为我们提供了5天的预测,但我们只对今天的天气感兴趣。这就是为什么只查询第一个数组。在不看JSON结构的情况下,写入JSON查询可能具有挑战性;我们将在稍后的步骤中查看用于在稍后编写查询的策略。
6.提取JSON以找到当今的温度
接下来,我们需要提取温度。在相同的JSONExtractor,设定另一个目标属性以温度,然后将JSON查询设置为:
JSON [“consolidated_weather”] [0] [“the_temp”]
您的对话框应该如下所示:
单击确定。
7.策略构建JSON查询的JSON变压器
它可以寻找到挑战查询以访问的天气信息。主要有两种选择这里:第一,你可以使用Visual预览采取的JSON结构定睛一看,建立一个基于你的查询:
{ “consolidated_weather”:[{ “ID”:5097016155701248 “weather_state_name”: “重云”, “weather_state_abbr”: “HC”, “wind_direction_compass”: “NW”, “创建”:“2019-11-01T19:26:02.630529Z”, “applicable_date”: “2019年11月1日”, “min_temp”:1.0 “MAX_TEMP”:10.805, “the_temp”:9.33, “WIND_SPEED”:2.5148912446088176 “ - 风向”:314.3123566281536, “air_pressure”:1030.5, “湿度”:64, “可见性”:16.250410104986877 “预测”:71},{ “ID”:5428890258374656 “weather_state_name”: “光云”, “weather_state_abbr”: “LC”, “wind_direction_compass”:“NW”, “创建”: “2019-11-01T19:26:05.847651Z”, “applicable_date”: “2019年11月2日”, “min_temp”:2.88, “MAX_TEMP”:11.56, “the_temp”:10.030000000000001“WIND_SPEED”:1.9563281953789868 “ - 风向”:315.1086944400913, “air_pressure”:1024.5, “湿度”:67, “可见性”:15.694282887934463, “预测”:70},{...}}
提示:使用jsonformatter.以漂亮的打印您_response_body属性,使其更容易在视觉预览阅读。
第二个选项是临时将FeatureReader临时添加到画布并在JSON URL中读取。单击参数并将架构扫描模式设置为“JSON查询”。然后在查询时,单击[...]以公开JSON树。在树中,展开JSON,然后展开Consolidated_Weather,然后单击“姓氏Devere_state_name”。复制所选项目框中指示的JSON查询,此查询与我们输入jsonextractor的查询相同。复制此查询后,您可以删除FearyureReader:
8.检查数据
运行您的工作区并检查jsonextractor。您将看到已创建天气和温度属性,并从JSON中提取值。运行此翻译时,结果会有所不同,因为它是一个现场JSON Feed:
在前面的示例中,我们在JSON中读取并使用JSONFLATTENER和JSONEXTRACTOR检查输出。在此示例中,我们将使用JSONFRAGMENTER与JSON一起使用,该JSON更嵌套。我们将从JSON中提取纬度和经度值来创建点。
1.使用文本文件读取器在JSON中读取
在一个空白工作区,或在之前工作区的其它部分,添加一个文本文件阅读器。阅读在VanTraffic.json文件。在参数方面,在一旦设置读取整个文件是,单击确定。
注意:浏览到JSON文件时,将Windows资源管理器中的文件类型更改为所有文件(*)以查看JSON文件。
我们在JSON数据中使用文本文件读取器而不是JSON阅读器读取的原因是因为我们希望JSON包含在称为Text_Line_Data的单个属性中。如果我们使用JSON阅读器在JSON中读取,每行将是其自身属性中包含的单独记录,包括括号。
2.添加一个JSONFragmenter来将JSON分解为各个属性
一个JSONFragmenter连接到文本文件阅读器。在参数,设定的JSON属性来text_line_data并设置JSON查询到:
JSON [“功能”] [*]
如果您愿意,可以使用本文第一部分(第7步)中所述的方法构建此查询。然后将Flatten查询结果变为Yes,然后确保递归Flatten对象/数组设置为Yes。您的对话框应该如下所示:
3.暴露兴趣的属性
添加attributeexposer变压器。在其参数中,输入以下属性:
属性。标题 |
properties.publiseddate. |
属性。LinkURI |
属性.Content. |
fme_geometry {0} |
类型 |
几何.Coordinates {} |
geometry.type. |
4.从公开的属性创建点
在AttributeExposer后添加VertexCreator变压器。在参数方面,设置X值的属性geometry.coordinates {},在列表中选择元素对话框中,输入坐标0。这将读出的阵列中,这是经度值在第一坐标。重复此为Y值,为坐标输入1。这将读出的阵列中,这是纬度值在所述第二坐标。您的对话框应该如下所示:
单击确定。
5.将坐标投影到LL84
在顶点后添加一个repoImpor变压器,并将目标坐标系统设置为ll84以恢复点。
6.检查结果
将检查器连接到VertexCreator并运行翻译。查看输出,你可以看到我们公开的每个属性都包含在每个点中:
数据署名:
第1部分:这里使用的数据来源于MetaWeather
第2部分:这里使用的数据来源于不列颠哥伦比亚省政府-驱动卑诗省。
©2019 S亚搏在线afe Software Inc |合法的