我有一个 json 输入到 wso2 微积分器。
我想检查一下,我的输入负载有重复的语言值。
例如:
{
"category": "test-category",
"displayNames": [
{
"language": "en",
"displayName": "sample",
"description": "this is a sample"
}, {
"language": "de",
"displayName": "german",
"description": "this is a german description"
},
{
"language": "en",
"displayName": "new text",
"description": "this is a new text"
}
]
}
上面的 json 具有重复的带有“en”值的语言。
首先我尝试使用 json 模式来实现这一点。但我们不能使用 json 模式来验证重复项。
我怎样才能做到这一点?
如果您知道可以输入的语言,您可以执行如下操作。
<filter xpath="count(//displayNames[language = 'en']) > 1 or count(//displayNames[language = 'de']) > 1">
<then>
<log>
<property name="MSG" value="Duplicate language values"/>
</log>
</then>
<else/>
</filter>
或者你可以执行如下操作。
<property name="langs" scope="default" type="STRING" value=""/>
<foreach expression="json-eval($.displayNames)">
<sequence>
<filter xpath="contains($ctx:langs, //language/text())">
<then>
<log>
<property name="MSG" value="Duplicate language values"/>
</log>
</then>
<else>
<property expression="concat($ctx:langs, ',', //language/text())" name="langs" scope="default" type="STRING"/>
</else>
</filter>
</sequence>
</foreach>