问题描述
{"firstName":"Todd","lastName":"Jones","age":32}
我的问题是如何删除年龄字段?我正在查看 Enrich Mediator 文档并注意到一个从有效负载中删除选定部分的示例:
示例 7 - 从有效载荷中删除选定的部分(此功能从 EI 6.6.0 WUM 级别 1595516738094 开始提供)
<target>
<inSequence>
<enrich>
<source clone="true" xpath="json-eval($.store.book[*].author,$.store.book[0])"/>
<target type="body" action="remove"/>
</enrich>
<respond/>
</inSequence>
<outSequence/>
</target>
但这对我不起作用,因为它在 EI 6.6.0 上可用,而我在 EI 6.1.1 上。我还能怎样才能达到预期的结果?
解决方法
作为 Enrich
Mediator 和 PayloadFactory
Mediator 的替代方法,您可以使用 Script
Mediator 删除属性。给出一个示例,删除 age
属性
<property name="JSONPayload" expression="json-eval($.)" />
<script language="js">
<![CDATA[
// var log = mc.getServiceLog();
var response = mc.getProperty("JSONPayload");
var jsonPayload = JSON.parse(response);
delete jsonPayload['age'];
// log.info(JSON.stringify(jsonPayload));
mc.setPayloadJSON(jsonPayload);
]]>
</script>
,
如果您的有效载荷只有 3 个元素,我认为您可以使用有效载荷工厂。
<payloadFactory media-type="json">
<format>
{"firstName":"$1","lastName":"$2"}
</format>
<args>
<arg evaluator="json" expression="$.firstName"/>
<arg evaluator="json" expression="$.lastName"/>
</args>
</payloadFactory>
您可能需要为此启用 JSON 流格式化程序/构建器,如此处所述。 https://docs.wso2.com/display/EI611/PayloadFactory+Mediator
如果上述方法不起作用,您还可以先将 firstName 和 lastName 放入单独的属性中,然后将其作为上下文属性引用。
即<arg evaluator="xml" expression="$ctx:firstName"/>