2015-11-20 106 views
0

我需要設置包含一些json的標頭。我已經嘗試了以下內容。這是可能的,你能做到嗎?請注意我用的SwiftyJSON,因此JSON(jsonVar). rawString()將字典內聯到字典

從SwiftyJSON:

public func rawString(encoding: UInt = NSUTF8StringEncoding, options opt: NSJSONWritingOptions = .PrettyPrinted) -> String? { 
    switch self.type { 
    case .Array, .Dictionary: 
     do { 
      let data = try self.rawData(options: opt) 
      return NSString(data: data, encoding: encoding) as? String 
     } catch _ { 
      return nil 
     } 
    case .String: 
     return self.rawString 
    case .Number: 
     return self.rawNumber.stringValue 
    case .Bool: 
     return self.rawNumber.boolValue.description 
    case .Null: 
     return "null" 
    default: 
     return nil 
    } 
} 
let addthis = [ 
    "foo": [1,2,3], 
    "bar": [ 
     "baz": "qux" 
    ] 
] 


    let headers = [ 
     // "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==", 
     "Content-Type": "application/x-www-form-urlencoded", 
     "addthis":" \(JSON(addthis).rawString()) " 
    ] 

我得到這個HTTP服務器上:

Optional("{\n \"foo\" : [\n 1,\n 2,\n 3\n ],\n \"bar\" : {\n \"baz\" : \"qux\"\n }\n}") 
+0

就是 「一」 的問題: 「1」 缺什麼? – user3441734

+0

不,問題是我得到:可選(「{\ n \」foo \「:[\ n 1,\ n 2,\ n 3 \ n],\ n \」bar \ 「baz \」:\「qux \」\ n} \ n}「)它應該是一個json? –

+0

@ChrisG。 JSON **是**一個字符串! – Kametrixom

回答

0
let headers = [ 
    "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "addthis": JSON(addthis).rawString()! 
] 

要小心!首先檢查.rawString是否爲有效String首先! ...

if let json = JSON(addthis).rawString() { 
    let headers = [ 
     "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==", 
     "Content-Type": "application/x-www-form-urlencoded", 
     "addthis": json 
    ] 
} 

...或者,如果一個空字符串是可以接受的

let headers = [ 
     "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==", 
     "Content-Type": "application/x-www-form-urlencoded", 
     "addthis": JSON(addthis).rawString() ?? "" 
    ] 

...

var a: String? = "alfa" 
print(a, a.dynamicType) // Optional("alfa") Optional<String> 
let b = a ?? "" 
print(b, b.dynamicType) // alfa String 

...是給這個反斜線麻煩.... 「作爲字符串的一部分必須轉義爲」\「」。

+0

都沒有,仍然可選(「{\ n \」foo \「:[\ n 1,\ n 2,\ n 3 \ n],\ n \」bar \「 :{\ n \「baz \」:\「qux \」\ n} \ n}「) –

+0

如果您在操場上嘗試此操作,您將會打印(標題)給這個反斜槓麻煩.... –

+0

我不是能夠做到這一點,因爲我對你的JSON(...)。rawString()函數一無所知。 – user3441734

0

我相信,唯一可以做的事情是:

let jsonString = removeUnexpectedCharactersFromJSONString(YOURJSON.rawString()!) 

我寫了簡單的功能:

func removeUnexpectedCharactersFromJSONString(jsonString: String) -> String { 
    var newStr = jsonString 
    newStr = newStr.stringByReplacingOccurrencesOfString("\n", withString: "") 
    newStr = newStr.stringByReplacingOccurrencesOfString(" ", withString: "") 
    newStr = newStr.stringByReplacingOccurrencesOfString("\t", withString: "") 
    return newStr 
}