簡體   English   中英

DataWeave 中的 URL 編碼

[英]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.

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