[英]Jolt Transformation of JSON with mutual exclusion
我正在嘗試使用JOLT規范轉換輸入JSON。 我的輸入包含一個response元素,該元素可以具有單個文本(案例1)值,也可以具有JSON元素(案例2),如下所示
規格
[
{
"operation": "shift",
"spec": {
"@(1,status)": {
"@(2,output)": {
"response": "statusMessage"
},
"TERMINATED": {
"@(2,status)": "statusMessage"
},
"FAILED": {
"@(2,response)": "statusMessage"
},
"COMPLETED": {
"@(2,status)": "statusMessage"
}
},
"status": "status"
}
}
]
輸入(非JSON響應元素)。 - - 情況1
{
"createTime": 1555623377858,
"updateTime": 1555623378681,
"status": "FAILED",
"output": {
"response": "Connection error."
}
}
輸入(JSON響應元素)。 ----案例2
{
"createTime": 1555623377858,
"updateTime": 1555623378681,
"status": "FAILED",
"output": {
"response": {
"headers": {
"ETag": [
"W/\"5-fy9qFc+NorJ+Wkr0e1jnrXHAs9k\""
],
"Connection": [
"keep-alive"
],
"Content-Length": [
"5"
],
"Date": [
"Thu, 18 Apr 2019 21:36:18 GMT"
],
"Content-Type": [
"text/html; charset=utf-8"
],
"X-Powered-By": [
"Express"
]
},
"reasonPhrase": "Internal Server Error",
"body": "Error",
"statusCode": 500
}
}
}
如果在響應具有JSON元素的情況下要向statusMessage分配“ reasonPhrase”,如何指定JOLT規范?
我的輸出應如下所示
Case 1 response should look like.
{
"statusMessage" : "Connection Error",
"status" : "FAILED"
}
Case 2 response should look like this.
{
"statusMessage" : "Internal Server Error",
"status" : "FAILED"
}
我認為我可以使用以下任一規范:
1)
[
{
"operation": "modify-overwrite-beta",
"spec": {
"statusMessage": "@(1,output.response)"
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"statusMessage": "@(1,output.response.reasonPhrase)"
}
},
{
"operation": "shift",
"spec": {
"status": "status",
"statusMessage": "statusMessage"
}
}
]
鏈中的第一個規范會將響應值存儲到statusMessage
字段中。 第二個將使用嵌套的reasonPhrase
值(如果存在)覆蓋statusMessage
字段。 鏈中的最后一個規范僅保留status
和statusMessage
字段。
2)
[
{
"operation": "shift",
"spec": {
"output": {
"response": {
"@(1,response)": "statusMessage[]",
"headers": {
"@(1,reasonPhrase)": "statusMessage[]"
}
}
},
"status": "status"
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"statusMessage": "=lastElement(@(1,statusMessage))"
}
}
]
它創建了一個名為statusMessage
的數組,如果response
是一個字符串,則該數組中將有一個元素,如果嵌套,則該數組中將有兩個元素,第二個是所需的狀態消息。 因此,第二個規范使用其數組中的最后一個元素覆蓋了statusMessage
字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.