2015-11-20 4 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 \ ": {\ n \ "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 Строка! ...

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 
} 

Смежные вопросы