簡體   English   中英

相互排斥的JSON顛簸轉換

[英]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字段。 鏈中的最后一個規范僅保留statusstatusMessage字段。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM