[英]URL encoding in DataWeave
我需要在查詢參數中點擊需要 URL 編碼的服務,並且輸入如下:
{
"test" : ["123", "124"]
}
當我使用https://www.urlencoder.io/進行編碼時,我得到以下格式:
%7B%0A%09%22test%22%20%3A%20%5B%22123%22%2C%20%22124%22%5D%0A%09%7D
而上面我需要傳入查詢參數。
我嘗試使用以下 dataweave 在 mulesoft 中生成上述 URL 編碼器輸出:
%dw 2.0
output application/x-www-form-urlencoded
---
payload
但它給了我以下輸出,這不是我想要的:
test=123&test=124
所以請讓我知道如何在 mule 中為上述輸入生成以下模式:
%7B%0A%09%22test%22%20%3A%20%5B%22123%22%2C%20%22124%22%5D%0A%09%7D
您正在混合兩個非常不同的概念。
application/x-www-form-urlencoded
是一種 MIME 類型,通常用於通過 HTTP 發布 Web 表單數據。 我提到了一個 Web 表單,但從技術上講,它可以用來發送任何“類似 JSON”的數據,當你這樣做時,當有多個字段時,它變成由&
分隔的key=value
對。
例如{"field1": "value1", "field2": "value2"}
在表示為x-www-form-urlencoded
時將變為field1=value1&field2=value2
另一方面, URL Encoding
用於對 URL 中不允許的某些字符(如非 ASCII 字符)或對 URL 具有特殊含義的字符(如?
、 &
)進行“百分比編碼” ,以便您可以安全地使用它來構造一個網址。
您需要的是可用於對字符串進行編碼的encodeURIComponent
函數。 此外,URL 編碼適用於字符串而不適用於 JSON 對象。 因此,您需要將 JSON 有效負載write
為字符串。 像下面的東西
%dw 2.0
import encodeURIComponent from dw::core::URL
output application/java
---
encodeURIComponent(
write(payload, "application/json")
)
請記住,根據在將有效負載寫入 String 時是否要保留縮進,您將獲得不同的結果。 例如,這將為您提供與上述結果不同(且更短)的結果。
%dw 2.0
import encodeURIComponent from dw::core::URL
output application/java
---
encodeURIComponent(
write(payload, "application/json", {indent: false}) // Shorter URL as it will not keep indentation
)
如果您使用它來生成 URL,最好不要保留縮進,因為它會使 URL 顯着縮短。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.