你在这里: 网络 > JSONTemplater

JSONTemplater

使用FME特性属性值填充JSON文档。文件作为模板提供,转换器将使用XQuery向模板中插入属性值和几何信息。模板可以从一个属性加载,一个文件,或直接输入变压器参数。

对于输入的每个特性输入端口,这个将评估JSON模板,并将结果放入result属性参数命名的属性中。然后将从转换器输出该特性。

JSON模板仅仅是包含以下内容的JSON文档XQuery功能。从本质上讲,这些函数是数据值的占位符。当模板被处理时,将对功能进行评估,结果将被插入到文档中。这通常用于在文档中插入特性属性值。要插入的属性的名称是使用其他几个转换器中使用的XQuery函数指定的:XMLTemplater,xmlupdate,xmlxqueryextractor,xmlxqueryexploder,等。

JSONTemplater,这个fme: get-attribute,fme: get-list-attributefme: get-json-attribute函数特别有用。只允许不改变特性的功能。看到XQuery有关可用函数的更多信息,请参阅函数文档。

下面的JSON模板使用“id”特性属性的值填充JSON元素。

{

“id”:fme:get-attribute(" id ")

}

如果特性上不存在属性,JSON键值将有一个空值。

要用list属性的内容填充JSON数组,这个fme: get-list-attribute可以使用,在这个例子中:

{

"ids": [fme:get-list-attribute("ids{}")]

}

如果函数调用不包含在方阵大括号中,如果函数返回多个值,将自动创建一个数组。如果函数返回一个或零值,则不会创建数组。

Sub-Templates

评估模板时,它只能访问当前正在处理的特性的属性。为了允许模板访问多个特性的属性,介绍了子模板的概念。使用FME:过程特征函数,transformer可以根据一组特性对一个子模板求值,然后将结果插入到第一个模板中。在变压器接口中,每个子模板都有一个名称。然后将在FME:过程特征调用以标识要计算的子模板。此外,将为每个子模板创建一个变压器输入端口。子模板将在输入相应转换器输入的特性上进行处理。输入这些输入端口之一的特性称为子特性。

在下面的例子中,这个模板构造一个JSON对象表示一个村庄,使用来自单个特性的信息。然后它填充了房屋的价值,使用来自进入内部输入端口的特性的属性值。

{

“名称”:fme:get-attribute(“village_name”),

“填充”:fme: get-attribute(“人口”),

“房屋”:。[

fme:工艺特点(“房子”)

]
}

与HOUSE输入端口关联的模板创建一个HOUSE对象。

{

“地址”:fme:get属性(“地址”),

“所有者”:fme:get-attribute(“业主”),

“num_floors”: fme: get-attribute (“num_floors”)

}

如果单个功能进入输入和两个特征输入房屋输入,生成的JSON文档可能如下所示:

{

“name”:“任何城镇,美国“,

“填充”:2568年,

“房屋”:。[

{

“地址”:“大街123号”

"所有者":"John Doe",

“num_floors”:2

},

{

“address”:“324主街”,

"所有者":"Jane Doe",

“楼层数”:3

}

]

}

一个模板可以调用许多子模板。例如,在上面的例子中,我们可以添加另一个名为business的子模板,,然后使用process-features函数运行该子模板模板。此外,一个子模板可以运行另一个子模板,在子模板不能直接或间接运行自身的限制下。

选择要处理的子功能

通常,进入JSONTemplater的特性具有层次结构。例如,每个村庄都有很多房子,每间房子都有几个房间,等。如果FME:过程特征函数使用如上所述,生成的文档可能不正确。假设有两个村庄,每个有五个房子。每个村庄和房子都有一个独立的FME特征。村落特征被引入输入端口,同时,房屋特征被路由到房屋输入端口。

如果使用上述模板运行变压器,将有两个输出特性,如预期。然而,两个村庄的物体都包括所有十个房子的物体。正确的做法是只对与当前村庄特征相对应的房屋特征子模板进行评估。

FME:过程特征函数提供了一种方法。其他功能参数可用于过滤待处理的子功能。第二个参数是属性名列表,第三个是属性值列表。只处理属性与给定的属性名称和值列表匹配的子特性。

此函数调用将对其的所有HOUSE特性的HOUSE子模板求值village_id属性与当前特性的id属性匹配。

FME:过程特征(“豪斯”,“village_id”,fme: get-attribute (" id "))

可以指定多个属性/值对。在这种情况下,属性名和属性值必须包含在括号中。下面的函数调用将对其中的所有HOUSE特性的HOUSE子模板求值village_id属性匹配当前特征的id属性,和谁的num_floors属性是2。

FME:过程特征(“豪斯”,(“Village_ID”,“Num_Floors”),(fme: get-attribute (" id "),2))

分组Sub-Features

通过参数分组子功能部件允许对子功能部件进行比中参数更粗粒度的筛选FME:过程特征函数。当该参数设置为属性名列表时,这个FME:过程特征函数将只处理与当前处理的特性具有相同属性值的子特性。注意,此参数对。没有影响特性。每一个特性将被处理并从转换器输出。

分组子功能时,如果每个组中的所有特征都是连续的,将分组子特征连续参数设置为“是”,可以提高变压器的性能。当这个值被设置时,一旦所有适用的子特性到达transformer,将立即处理这些特性。这意味着变压器将以非阻塞方式工作,而不是在开始处理模板之前等待所有特性的到来。如果组中的特性不是连续到达,则转换器的行为是未定义的。如果发生这种情况,可能不会处理某些子功能。

使用单个函数调用运行多个子模板

可以使用单个函数调用计算多个子模板。的模板名称列表FME:过程特征函数。子模板将根据列表中指定的每个子特性进行评估。这些特性将按照它们进入转换器的顺序进行处理。下面的函数调用处理HOUSE和BUSINESS子模板:

fme:工艺特点((“房子”,“业务”))

时,仍可使用子特征选择参数FME:过程特征函数用于计算多个子模板。

在同一功能上运行子模板

可以使用用于计算当前模板的相同特性来计算子模板。的fme:流程模板函数取一个名称,或名单,应该计算的子模板的。将对这些模板进行评估,并将结果插入到当前模板中。要对模板求值,只需将子模板的名称作为函数参数输入即可。例如,在处理房屋特征时,我们可以使用下面的函数调用来计算所有者模板。所有者模板将使用进入HOUSE输入端口的特性进行评估。

fme:流程模板(“业主”)

要计算一组模板,传递姓名列表:

FME:过程模板(以下简称“所有者”,“地址”))

这种技术可以用于模块化JSON模板,通过移动重复的模板结构到一个单一的地方。例如,如果房屋和企业都有地址,该地址可以提取到一个地址模板,然后房屋和商业模板可以使用fme:流程模板函数插入地址值。这种方式,地址模板不必在内部和业务模板中复制。

几何图形模板

几何模板可以用来编写定制的JSON几何。有很多函数可以提取几何数据,以及几何图形上子模板的处理。有关更多信息,有关所有几何函数的列表,请参阅XQuery函数文档,以及如何使用子模板写出几何数据。

几何子模板的操作方式与常规子模板相同,除了几何图形子模板没有在转换器上创建输入端口。

在计算几何模板时,访问特性属性的函数(fme: get-attribute等),仍然是可用的。

属性和子模板名称的验证

当通过模板表达式参数或模板文件参数指定JSON模板时,转换器将验证所有引用的特征属性是否存在于传入特征中。如果输入功能中缺少(未暴露)属性,变压器将突出显示为不完整的红色。当这种情况发生时,transformer的摘要注释将指出JSON模板引用的缺少的属性。

此外,的子模板名称FME:过程特征fme:流程模板功能,将验证这些名称,以确保它们与transformer接口中给定的名称匹配。

可以通过将参数Validate属性/模板名称设置为No来覆盖这个额外的验证行为。

编辑变压器参数

使用一组菜单选项,可以通过引用工作区中的其他元素来分配transformer参数。更高级的功能,比如高级编辑器和算术编辑器,也可在一些变压器。要访问这些选项的菜单,点击在适用参数旁边。有关更多信息,看到变压器参数菜单选项

变压器类别

特定格式

网络

搜索FME知识中心

搜索有关此转换器的示例和信息FME知识中心