2016-03-21 18 views
0

不知道如何在swift中快速創建字符串。我想發送以錯誤的格式發送的字符串

行動=類別&數據= { 「ID」:2, 「類型」: 「片材」}

如在請求一個parameterstring。 XCode中我已經建立這樣的:

let actionstring = "\"id\":2,\"type\":\"sheet\"" 
parameters: ["action": "category", "data": actionstring] 

如果我做一個打印(actionstring)我得到我想要的東西,但是當我發送請求時,它看起來是這樣的:

行動=類別&數據=%22id%22%3A2%2C%22type%22%3A%22sheet%22

+1

這是什麼問題導致你? – Wain

+0

你如何發送請求?如果它是在一個URL中,然後看看這個答案:[URL允許的字符](http://stackoverflow.com/a/1856809/887210) – ColGraff

+0

你沒有向我們展示'actionString'是如何轉義百分比的你顯然已經做了一些事情來百分比逃避它),但是你錯過了你所期望的'{'和'}'。如果你真的希望它看起來像'action = category&data = {「id」:2,「type」:「sheet」}',那麼你可能想把這些添加到你的'actionString'中。坦率地說,雖然,我不確定你想要那樣。一般來說,你會像'action = category&data [id] = 2&data [type] = sheet'一樣發送它,除非你在web服務中做了非常不標準的事情。沒有關於您的網絡服務的更多信息很難說。 – Rob

回答

1

也就是說爲URL百分比編碼的字符串正確:

import Foundation 

let actionstring = "\"id\":2,\"type\":\"sheet\"" 
let parameters = ["action": "category", "data": actionstring] 

var string = "" 
for (index, parameter) in parameters.enumerate() { 
    string.appendContentsOf("\(parameter.0)=\(parameter.1)") 
    if index + 1 < parameters.count { string.append(Character("&")) } 
} 

print(string.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())) 
// => Optional("action=category&data=%22id%22%3A2,%22type%22%3A%22sheet%22") 
+1

僅供參考,'URLHostAllowedCharacterSet'不足以用於百分比轉義。例如,如果該值包含「+」或「&」,它會讓這些通過未轉義的,這是有問題的。如果你知道不會有那些字符,你可以用'URLHostAllowedCharacterSet'離開,但通常你應該手動建立你自己的字符集或創建一個'URLHostAllowedCharacterSet'的可變表示,然後刪除適當的字符。請參閱http://stackoverflow.com/a/35912606/1271826。 – Rob

+1

好的電話,我沒有意識到那些在那裏。謝謝! – ColGraff

1

一般來說,如果你想data被接收爲通過在x-www-form-urlencoded請求的Web服務的關聯數組,你會怎麼做:

action=category&data[id]=2&data[type]=sheet 

這將導致data接收作爲關聯數組。

而且,正如其他人所指出的那樣,如果category2,或sheet值有任何保留字符(值得注意的是,空間,+,或&這些值內可能會出現問題),你會百分之逃生者。


這樣發送結構化數據的另一種方式是構造一個application/json請求。它僅取決於您的Web服務期望的內容(因爲這兩種請求的Web服務實現是不同的)。我假設你的問題是你的web服務期待x-www-form-urlencoded請求,但是如果你需要演示JSON請求,請告訴我們。