span8
span4
在前面的文章中,写作JSON我们看着使用FME不同的方式来写JSON。在这篇文章中,我们将看看详细地介绍了如何编写使用JSONTemplater和文本文件作家嵌套JSON。该工作流程亚搏在线将允许我们写在上一篇文章中的最后一步中提到的嵌套数据。
这个用例是一个比较先进的,但如果你想要写的嵌套JSON数据是必要的。的基本模式是在数据读取(在这种情况下,JSON没有几何形状,但也可以是在FME任何数据),使用JSONTemplater创建FME属性含有JSON带有嵌套的结构,然后写入JSON属性出到文本文件。我们使用的是文本文件,而不是作家的JSON作家因为在FME,任何时候你想直接写出来的属性的内容,您可以使用文本文件作家。
该JSONTemplater使用模板的方法来写嵌套的JSON(非常类似于XMLTemplater)。模板表示的数据的结构,功能,如FME:GET属性功能,FME:GET-JSON的属性或FME:过程特征被在模板内用于构建JSON结构从FME功能。使用子模板可以让一个创建具有多个子元素根文件。
输入JSON:PublicArt.json
1.启动FME Workbench和生成工作区
启动FME Workbench和点击生成工作区。在生成工作区对话框填写如下:
读者
格式:JSON(JavaScript对象符号)
数据集:PublicArt.json(下载并使用本地路径)
作家
格式:文本文件
数据集:... \输出\ PublicArtNested.json(在任何你愿意的话)
你的对话框应该是这样的:
单击确定。
2.检查在Visual预览源数据
运行工作空间,检查源数据集:
你可以看到每个185个特点是在温哥华的艺术装置。虽然数据包括经度和纬度值,我们不会在这个例子中创建的几何形状。我们的目标是从一个大的阵列的邻域变换此JSON来,其中每个技术安装嵌套其各自的相邻单元的下方,像这样的键 - 值对的嵌套结构的属性:
{ “街市”:[{ “名称”: “港中心Parkade”, “标题”: “属于的行动”, “经度”:-123.110097741722, “纵横”:49.2837806793832},{ “名称”:“中国文化中心”, “标题”: “中国门”, “经度”:-123.103282272368, “纵横”:49.2797561341325},...], “士达科纳”:[{ “名称”: “国家工程院子里”, “标题”:“滚筒”, “经度”:-123.092675, “纵横”:49.2736209999959},{ “名称”: “吉姆绿色住宅”, “标题”: “玄关”, “经度”:-123.095131, “纵横”:49.2842699999959},...],...}
3.添加一个采样器
为了建立我们的嵌套JSON,我们将使用一个JSONTemplater与两个子模板:一个为每个居委会一个单独的数组,另一个包含在这附近所有的艺术装置。为了让每一个我们需要提供JSONTemplater有六个特点,一是从每个居委会一个单独的数组。要做到这一点,我们将使用采样变压器。添加一个采样器,并将其连接到读卡器的功能型,thenset以下参数:
组方:邻居
采样类型:一是N个特征
你的对话框应该是这样的:
单击确定。
启用缓存功能,点击你的采样运行了这一点。你应该有六个特征来的采样出来:采样口,每一个社区。这些将提供给的JSONTemplater子模板之一。
4.添加JSONTemplater
现在,我们有附近的特点,采样后添加JSONTemplater。
打开JSONTemplater。首先,让我们添加子模板。子模板用于打开FME功能到根模板,甚至是其他子模板的孩子。
要添加一个子模板,检查小组模板框,然后点击子模板表+按钮。在端口字段中,称此子模板附近。添加另一个子模板,并称之为艺术。
你会发现每个模板场是红色的,这意味着我们必须提供一个值之前,我们可以单击确定。因为我们希望我们的新的子模板端口连接到功能,通过只输入空的大括号{}到每个模板场开始。你的对话框应该是这样的:
单击确定。
5.连接功能向JSONTemplater输入端口
你会看到,每个模板(ROOT,邻居,ART)创建一个输入端口。我们提供六个特征根,但目前没有任何其他端口。因为我们想ART包含所有的艺术装置,单击并从阅读器功能类型的ART端口拖累。这将提供所有185个功能,在我们的子模板使用。您的工作空间应该是这样的:
现在,我们需要功能连接到根模板。因为我们希望有一个单一的JSON文件是从JSONTemplater输出,最容易做的事情是使用一个造物主,这将提供一个单一的功能到根模板。添加一个造物主的空白画布,并将其连接到JSONTemplater的根输入端口:
6.构建根模板
现在我们已经连接到这两个我们的模板功能,再次打开了JSONTemplater的参数。
首先,让我们设置根模板。这个模板设置JSON层次结构的顶层,在这种情况下,一旦因为它接收到一个功能将只执行。点击[...]图标旁边的根模板字段打开根模板Expression对话框。该对话框类似于文本编辑器,让我们建立我们的模板表达式。复制并粘贴下面的模板,或者通过打字和双击该子模板> SUB建立它自己的左边添加功能(注意管道中的花括号内,{| |}):
{|FME:工艺特征( “邻居”)|}
金融监督局:工艺特征(“邻居”)函数将插入我们的子模板NEIGHBORHOOD的结果数组中的项。
在这个例子中,我们使用的是更高级一些的JSON模板表达式之一,管道|。在指定的JSONiq文档中,管是一个动态对象构建表达。这意味着什么在这种情况下是:创建子模板作为单独的对象的每个结果。如果我们不添加这些管道,所产生的JSON文件将不必在每次进入邻里之间所需的逗号。
单击确定。
7.构建邻里模板
该子模板将创建JSON文件的每一个特征,与所有的邻居的名字被取代FME:GET属性(“邻居”)。金融监督局:工艺功能(“ART”)函数将插入我们的子模板ART的结果数组中的项。点击[...]图标旁边的模板领域附近。输入以下模板:
{FME:GET属性( “邻居”):[FME:过程的功能( “ART”, “邻居”,FME:GET属性( “邻居”))]}
单击确定。
8.构建ART模板
接下来,让我们构建的ART子模板。点击[...]图标旁边的ART模板领域。输入以下模板:
{ “姓名”:FME:获取属性( “名称”), “标题”:FME:获取属性( “标题”), “纵横”:FME:获取属性( “纵横”), “经度”:FME:GET属性( “经度”)}
该模板将构建技术安装数据的阵列,每个FME特征正在变成一块JSON的此模式匹配。单击确定。
9.查看迄今为止的结果
运行工作区和检查JSONTemplater的输出端口。您应该看到所有的社区合并成一个JSON文件中的属性_result匹配我们的目标模板。点击[...]按钮旁边视觉预览的表中查看电池查看全部价值。然而,这JSON是非常难读,因为它是不适合打印:
让我们来解决这个问题。
10.加入JSONFormatter
您JSONTemplater后添加JSONFormatter。该变压器将格式化我们的JSON文档,所以它适合打印。打开它的参数和JSON文件设置为_result。然后,设置输出属性来text_line_data。使用文本文件作家写作时该属性名称被保留使用。你的对话框应该是这样的:
单击确定。
11.运行的工作区,并检查最后的结果
运行工作区和检查的最终结果,无论是在视觉预览或您选择的文本编辑器。您应该看到JSON下面的文章中,这样的事情(略)年初确定的目标结构:
{ “街市”:[{ “名称”: “港中心Parkade”, “标题”: “属于的行动”, “经度”:-123.110097741722, “纵横”:49.2837806793832},{ “名称”:“中国文化中心”, “标题”: “中国门”, “经度”:-123.103282272368, “纵横”:49.2797561341325},...], “士达科纳”:[{ “名称”: “国家工程院子里”, “标题”:“滚筒”, “经度”:-123.092675, “纵横”:49.2736209999959},{ “名称”: “吉姆绿色住宅”, “标题”: “玄关”, “经度”:-123.095131, “纵横”:49.2842699999959},...],...}
恭喜!你学会了如何创建自定义的嵌套JSON使用JSONTemplater从FME功能。在模板表达式提供的功能相结合的子模板对话框允许复杂的自定义JSON结果。
数据归属
这里使用源自从公开数据中的数据由提供温哥华市, 不列颠哥伦比亚省。它包含了开放政府许可协议进行许可信息 - 温哥华。
其他资源
多达10个附件(包括图像)可以具有最大的每4.0 MB总4.0 MB被使用。
@samat亚搏在线safe,@deanat亚搏在线safe这一直是一个项目,我的工作中,我呈现JSON数据嵌入在MapBox GL HTML模板(不是单张)非常有见地的文章。但我看到的一个关键问题是,将管道上的根模板触发一个错误消息,但没有管,我没有得到的逗号。不知道如何解决这个。
此外,我的模板生成多边形,但坐标输出被包裹在引号......我该如何摆脱引号?
你好@jnotter,很高兴听到您发现文中的有用。针对您的问题的几点思考:
祝你好运,并请让我们知道如何去。
©2020安全亚搏在线软件公司|法律