[英]Ignore order and missing fields for Self-Written Transformations for JSON
我正在嘗試使用Self-Written Transformations for JSON
而不是Identity Transformation ID
來反序列化來自外部服務器的 JSON。
但是,這僅在所有字段都按指定順序排列時才有效(JSON 規范不保證)。 缺少字段也是一個問題,會引發異常。
有什么方法可以復制ID
行為(對於任何訂單和缺少的字段都可以),但讓我自己定義字段名稱?
示例 JSON
{
"d": {
"__abc": "111",
"results": [
{
"__metadata": {
"id": "SOME_ID",
"uri": "SOME_URI",
"type": "SOME_TYPE"
},
"FieldA": "X",
"FieldB": "X"
},
{
"__metadata": {
"id": "SOME_ID2",
"uri": "SOME_URI2",
"type": "SOME_TYPE2"
},
"FieldA": "Y",
"FieldB": "QQ"
}
]
}
}
得益於 Sandra 的轉變:
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates" version="0.1">
<tt:root name="ROOT" type="?"/>
<tt:template>
<object>
<object name="d">
<str name="__abc">
<tt:value ref=".ROOT.d.__abc"/>
</str>
<array name="results">
<tt:loop name="S_RESULT" ref=".ROOT.d.results">
<object>
<object name="__metadata">
<tt:skip/>
<!--<str name="id">
<tt:value ref="$S_RESULT.__metadata.id"/>
</str>
<str name="uri">
<tt:value ref="$S_RESULT.__metadata.uri"/>
</str>
<str name="type">
<tt:value ref="$S_RESULT.__metadata.type"/>
</str>-->
</object>
<tt:group>
<tt:cond>
<str name="FieldA">
<tt:value ref="$S_RESULT.FIELDA"/>
</str>
</tt:cond>
<tt:cond>
<str name="FieldB">
<tt:value ref="$S_RESULT.FIELDB"/>
</str>
</tt:cond>
</tt:group>
</object>
</tt:loop>
</array>
</object>
</object>
</tt:template>
</tt:transform>
要允許一組元素位於組中的任何位置,您可以將它們包裝到tt:group
並嵌套tt:cond
(以及類似的) 。
以任何順序具有<str name="FieldA">...</str>
和<str name="FieldB">...</str>
:
<tt:group>
<tt:cond>
<str name="FieldA">
<tt:value ref="$S_RESULT.FIELDA"/>
</str>
</tt:cond>
<tt:cond>
<str name="FieldB">
<tt:value ref="$S_RESULT.FIELDB"/>
</str>
</tt:cond>
</tt:group>
如果您希望其中一個是可選的(或兩者兼有),您可以使用<tt:cond frq="?">
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.