西班牙
斯潘4
在FME中,有很多方法可以操作JSON来提取所需的数据。在本文中,我们将介绍三种不同的转换器,并重点介绍它们的用途:jsonflatter、JSONExtractor和jsonfragment。在第一个示例中,我们将从变温使用jsonflatter和JSONExtractor。在第二个示例中,我们将使用JSONFragmenter将一个JSON文件分割成包含多个记录的单独属性。
源MetaWeather API调用:https://www.metaweather.com/api/location/9807/
源MetaWeather API调用为文件:VancouverWeather.json
来源:温哥华流量JSON:万特拉菲.json
工作区:转换-json.fmwt
我们将使用HTTPCaller从MetaWeather API读取JSON消息,然后提取天气状态。本例将展示从JSON消息创建属性的两种方法。首先,我们将使用jsonflatter展平JSON以公开所有属性。其次,我们将使用JSONExtractor使用查询提取JSON的特定部分。
注意:如果此API的URL更改,则可以使用附加的示例数据VancouverWeather.json相反。
一从URL查看JSON数据
打开FME工作台并启动一个空白工作区。在画布中添加一个Creator transformer。
二添加HTTPCaller转换器
单击创建者并添加HTTPCaller转换器。创建者将触发HTTPCaller从URL获取信息。在HTTPCaller参数中,为请求URL粘贴以下URL并将HTTP方法设置为GET:
https://www.metaweather.com/api/location/9807/
此API调用用于温哥华(位置9807);如果您想用自己的城市来遵循这个示例,可以查找WOEID,然后替换URL末尾的数字字符串。您的对话框应该如下所示:
单击“确定”。
3.选择要保留的属性
我们只想保留HTTPCaller的_response_body属性。向HTTPCaller添加AttributeKeeper转换器。在参数中,将要保留的属性设置为“响应体”,然后单击“确定”。
4.使用jsonflatter创建属性
要访问单独的属性,例如天气状态和温度,我们需要将JSON扁平化。添加一个jsonflatter转换器,并为JSON文档选择_response_body。
现在,如果在启用了功能缓存的情况下运行工作区,并在视觉预览中选择单个功能。“功能信息”窗口显示“响应体”有许多未公开的属性(数量将根据响应而变化),其中包含我们需要的所有信息:
jsonflatter工作流帮助将所亚搏在线有JSON值转换为FME属性。接下来的挑战是使用attribute脚说者选择要暴露哪些属性。
五提取JSON以查找今天的天气状态名称
如果我们对一个元素或属性感兴趣,我们可以使用JSONExtractor将其直接提取到一个属性中,而不是使用json扁平化JSON。要查找今天的天气,我们需要提取父元素并公开子元素。将JSONExtractor转换器连接到AttributeKeeper,在参数中,将源JSON文档设置为_response_body,然后将目标属性设置为Weather。对于JSON查询,输入:
json (" consolidated_weather "] [0] (“weather_state_name”)
该查询将提取名为ated_weather的父元素,然后提取数组中的第一个元素(它是0),然后提取名称weather_state_name的值。这个API给了我们5天的天气预报,但是我们只对今天的天气感兴趣。这就是为什么只查询第一个数组的原因。在不查看JSON结构的情况下编写JSON查询可能很有挑战性;在后面的步骤中,我们将研究编写查询的策略。
六提取JSON以找到今天的温度
接下来,我们需要提取温度。在同一个JSONExtractor中,将另一个目标属性设置为Temperature,然后将JSON查询设置为:
json (" consolidated_weather "] [0] (“the_temp”)
您的对话框应该如下所示:
单击“确定”。
七为JSON转换器构建JSON查询的策略
查找查询来访问天气信息是很有挑战性的。这里有两个主要的选项:首先,您可以使用Visual Preview仔细查看JSON结构,并基于此构建您的查询:
{“consolidated_weather”: [{" id ": 5097016155701248,“weather_state_name”:“沉重的云”,“weather_state_abbr”:“hc”、“wind_direction_compass”:“西北”,“创建”:“2019 - 11 - 01 t19:26:02.630529z”、“applicable_date”:“2019-11-01”,“min_temp”: 1.0,“max_temp”: 10.805,“the_temp”: 9.33,“wind_speed”: 2.5148912446088176,“wind_direction”: 314.3123566281536,“air_pressure”: 1030.5,“湿度”:64年,“可见性”:16.250410104986877,“可预见性”:71},{" id ": 5428890258374656,“weather_state_name”:“轻云”、“weather_state_abbr”:“信用证”,“wind_direction_compass”:“西北”、“创建”:“2019 - 11 - 01 t19:26:05.847651z”、“applicable_date”:“2019-11-02”,“min_temp”:“max_temp”: 11.56, 2.88“the_temp”:“wind_speed”: 1.9563281953789868, 10.030000000000001“wind_direction”:“air_pressure”: 1024.5, 315.1086944400913“湿度”:67年,“可见性”:15.694282887934463,“可预见性”:70},{…}}
提示:使用JSONFormatter对_response_body属性进行美化打印,使其更容易在可视化预览中读取。
第二个选项是临时向画布添加一个FeatureReader并读取JSON URL。单击参数并将模式扫描模式设置为“JSON查询”。然后在查询下,单击[…]来公开JSON树。在树中,展开JSON,然后展开consolidated_weather,并单击下面的子weather_state_name。复制在Selected Item框中显示的JSON查询,该查询与我们输入到JSONExtractor中的查询相同。复制这个查询后,你可以删除FeatureReader:
八检查数据
运行您的工作区并检查JSONExtractor。您将看到已经创建了天气和温度属性,并从JSON中提取了值。当你运行这个转换时,结果会有所不同,因为它是一个实时JSON提要:
在前面的示例中,我们读取JSON并使用jsonflater和JSONExtractor检查输出。在本例中,我们将使用一个JSONFragmenter来处理嵌套更多的JSON。我们将从JSON中提取纬度和经度值来创建点。
一使用文本文件读取器读入JSON
在空白工作区中,或在前一个工作区的另一节中,添加文本文件阅读器。在货车上阅读。json文件。在参数中,将一次读取整个文件设置为Yes,单击OK。
注意:在浏览JSON文件时,将Windows资源管理器中的文件类型更改为All Files(*)以查看JSON文件。
我们使用文本文件阅读器而不是JSON阅读器读取JSON数据的原因是,我们希望JSON包含在一个名为text_line_data的属性中。如果我们使用JSON阅读器读取JSON,每一行都是包含在其自身属性(包括括号)中的单独记录。
二添加一个JSONFragmenter来将JSON分解为单独的属性
将JSONFragmenter连接到文本文件阅读器。在参数中,将JSON属性设置为text_line_data,并将JSON查询设置为:
json(“特性”][*]
如果您愿意,可以使用本文第一部分(步骤7)中所述的方法来构建此查询。然后将Flatten查询结果更改为属性Yes,然后确保递归地将Flatten对象/数组设置为Yes。您的对话框应该如下所示:
3.公开感兴趣的属性
添加一个attribute脚注转换器。在其参数中,输入以下属性:
属性.标题 |
属性.PublishedDate |
properties.LinkURI属性 |
属性.内容 |
fme_几何{0} |
类型 |
几何学.坐标{} |
几何图形.type |
4.使用公开的属性创建点
在AttributeExposer之后添加一个vertrefator变压器。在参数中,将X值设置为geometry.coordinates{}属性,在列表元素选择对话框中,输入0作为坐标。这将读取数组中的第一个坐标,即经度值。对Y值重复此操作,为坐标输入1。这将读取数组中的第二个坐标,即纬度值。您的对话框应该如下所示:
单击“确定”。
五将坐标投影到LL84中
在垂直排泄器之后添加一个重投影变压器,并将目标坐标系设置为LL84以重投影点。
六检查结果
将检查器连接到垂直排泄器并运行翻译。检查输出,可以看到我们公开的每个属性都包含在每个点中:
数据属性:
第1部分:此处使用的数据源于变温
第2部分:此处使用的数据源于不列颠哥伦比亚省政府.
?2019安全亚搏在线软件公司|合法的