你在这里: JSON > JSONTemplater公司

JSONTemplater公司

使用fme特性属性值填充json文档。文档作为模板提供,转换器将使用xquery将属性值和几何信息插入到模板中。模板可以从属性、文件加载,也可以直接输入到转换器参数中。

对于每个进入输入端口将计算JSON模板,并将结果放入由result属性参数命名的属性中。然后,该特性将从变压器输出。

json模板只是一个json文档,它包含XQuery的功能。实际上,这些函数是数据值的占位符。处理模板时,将对函数进行求值,并将结果插入到文档中。这通常用于将要素属性值插入到文档中。要插入的属性的名称是使用其他几个转换器中使用的相同xquery函数指定的:XMLTemplater我是说,XMLUpdater我是说,XMLXQueryExtractor我是说,XMLXQueryExploder等等。

在jsontemplater中,FME:获得属性我是说,FME:获取列表属性FME:获得JSON的属性函数特别有用。只允许不改变功能的函数。见XQuery的有关可用函数的详细信息,请参阅函数文档。

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

{

“id”:fme:get属性(“id”)

}

如果该属性不存在于该特征,则JSON关键字值将具有空值。

要用list属性的内容填充json数组,可以使用FME:获取列表属性可用于此示例中:

{

“ids”:[fme:get list attribute(“ids{}”)]

}

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

子模板

评估模板时,它只能访问当前正在处理的要素的属性。为了使模板能够访问多个特征的属性,引入了子模板的概念。使用FME:工艺特点函数中,转换器可以对一组特征上的子模板求值,然后将结果插入到第一个模板中。在transformer接口中,将为每个子模板指定一个名称。此名称将用于FME:工艺特点调用以标识要评估的子模板。此外,将为每个子模板创建一个转换器输入端口。子模板将在输入相应变压器输入的特征上进行处理。输入其中一个输入端口的特征称为子特征。

在下面的示例中模板构造一个表示村庄的JSON对象,其中包含来自单个功能的信息。然后,它使用进入房屋输入端口的要素的属性值填充“房屋”值。

{

“name”:fme:get属性(“village_name”),

“populate”:fme:get属性(“populate”),

“房屋”:[

FME:工艺特点(“房屋”)

]
}

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

{

“address”:fme:get属性(“address”),

“owner”:fme:get属性(“owner”),

“num-floors”:fme:get属性(“num-floors”)

}

如果单个要素进入输入和两个特性输入house输入,生成的json文档可能如下所示:

{

“name”:“美国Anytown”,

“填充”:2568,

“房屋”:[

{

“address”:“大街123号”,

“owner”:“约翰·多伊”,

“数字楼层”:2

},

{

“address”:“大街324号”,

“owner”:“无名女”,

“数字楼层”:3

}

]

}

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

选择要处理的子要素

通常,进入jsontemplater的特性有一个层次结构。例如,每个村庄都有一些房子,每个房子都有几个房间等。如果FME:工艺特点函数的使用如上所述,生成的文档可能不正确。假设有两个村庄,每个村庄有五间房子。每个村庄和房屋都有一个单独的FME特征。乡村特色被引入输入端口,而房屋特征被路由到房屋输入端口。

如果使用上述模板运行transformer,则会有两个输出特性,如预期的那样。然而,这两个村庄的物品将包括所有十个房屋物品。正确的行为是只评估与当前村庄特征相对应的房屋特征上的子模板。

这个FME:工艺特点函数提供了这样做的方法。附加的功能参数可以用来过滤要处理的子功能。第二个参数是属性名列表,第三个参数是属性值列表。只处理其属性与给定的属性名称和值列表相匹配的子特性。

这个函数调用将评估房子子模板的所有功能village_id属性与当前特性的id属性匹配。

fme:工艺特点(fme:“房子”、“village_id”: get-attribute (" id "))

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

fme:进程特性("HOUSE", ("village_id","num_floors"), (fme:get-attribute("id"), 2))

分组Sub-Features

方法中的参数相比,按参数分组子功能允许对子功能进行更粗粒度的筛选FME:工艺特点函数。将此参数设置为属性名列表时,将FME:工艺特点函数将只处理与当前正在处理的特性具有相同属性值的子特性。请注意,此参数对特性。每一个特征将被处理并从变压器中输出。

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

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

可以使用一个函数调用来计算多个子模板。方法传递一个模板名称列表FME:工艺特点函数。子模板将根据列表中指定的每个子特性进行评估。这些特征将按照它们进入变压器的顺序进行处理。下面的函数调用处理房子和业务子模板:

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

时仍可使用子特征选择参数FME:工艺特点函数用于计算多个子模板。

在相同的特性上运行子模板

可以使用用于评估当前模板的相同特性来评估子模板。这个FME:流程的模板函数接受应该求值的子模板的名称或名称列表。将对这些模板进行评估,并将结果插入到当前模板中。要计算模板的值,只需将子模板的名称作为函数参数输入即可。例如,在处理房屋特性时,我们可以使用下面的函数调用来评估业主模板。业主模板将使用进入房屋输入端口的功能进行评估。

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

要评估一组模板,请传递一组名称:

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

这种技术可以通过将重复的模板结构移动到单个位置来模块化JSON模板。例如,如果住宅和企业都有地址,则可以将地址提取到地址模板中,然后住宅和企业模板可以使用FME:流程的模板函数插入地址值。这样,地址模板就不必在房子和业务模板中复制了。

几何模板

几何体模板可用于编写定制的JSON几何体。有大量的函数允许提取几何数据,并处理几何图形上的子模板。有关更多信息,请参见XQuery函数文档中所有几何函数的列表,以及如何使用子模板写出几何数据。

几何子模板的操作方式与常规子模板相同,只是几何子模板没有在transformer上创建输入端口。

在评估几何图形模板时,访问特征属性的函数(FME:获得属性等),仍然可用。

属性和子模板名的验证

当通过模板表达式参数或模板文件参数指定JSON模板时,转换器将验证所有引用的特性属性都存在于传入的特性中。如果输入特性中缺少(未公开)属性,则转换器将以红色高亮显示为不完整。当这种情况发生时,变压器的总结注释将指示缺少的属性的JSON模板引用。

此外,当子模板的名称被传递到FME:工艺特点FME:流程的模板功能名称将被验证,以确保它们匹配变压器接口提供的名称。

这种额外的验证行为可以通过参数设置验证属性/模板名称为No.覆盖

编辑变压器参数

使用一组菜单选项,变压器参数可以通过引用在工作区中的其它元件来分配。更先进的功能,如高级编辑,算术编辑,也是一些变压器可用。要进入这些选项的菜单上,单击适用的参数旁边。欲了解更多信息,请参阅变压器参数菜单选项

变压器分类

JSON

搜索FME知识中心

搜索样品和有关该变压器上的信息FME知识中心