У меня проблема с разбором JSON в Swift. Я использую фреймворк SwiftyJSON.
Мои данные приходят из сети:
let dataString : NSString = NSString(data: data, encoding: NSUTF8StringEncoding)!;
печать этого:
println("Received data: \(dataString)")
дает мой JSON:
Received data: {"result":"success"}
Но когда я пытаюсь прочитать значение результата:
let json = JSON(dataString);
println(json["result"].stringValue); //<-- empty string
тогда вывод пустой. Я пробовал разные подходы, например:
println(json[1]["result"].stringValue); //<-- empty string
println(json["result"]); //<-- prints "null"
но пока ничего не получалось. Что я делаю не так?
Изменить: это на стороне сервера (Java):
String response = client.isAuthenticated() ? "success" : "fail";
client.send(new JSONObject().put("result", response).toString());
Для чтения данных я использую CocoaAsyncSocket:
func socket(sock: GCDAsyncSocket!, didReadData data: NSData!, withTag tag: Int)
Ошибка, которую я получаю:
Dictionary["result"] сбой, это не словарь
Edit2: я обнаружил, что проблема в данных:
let dataFromString = dataString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)?
имеет длину 22 байта. Если я установлю
dataString : NSString = "{\"result\":\"success\"}"
и сделайте то же самое снова, его длина 20 байт. Мои данные имеют два байта 0x0014 в начале:
<7b227265 73756c74 223a2273 75636365 7373227d> //<-- correct
<00147b22 72657375 6c74223a 22737563 63657373 227d> // <-- mine
Если я удалю два пока с помощью
dataFromString!.subdataWithRange(NSMakeRange(2, 20))
JSON может быть правильно проанализирован.
Edit3 (мое решение):
Проблема была в DataOutputStream, который я использовал в Java-Service. Он добавил два байта к моему JSON. Я заменил его на BufferedOutputStream, и теперь он работает как положено.