我在解析Swift中的JSON時遇到了問題。我使用SwiftyJSON框架。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)
我得到的錯誤是:
詞典[「結果」]失敗,它不是一本詞典
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(我的解決方案):
的問題是我在Java的服務使用的是DataOutputStream。它向我的JSON添加了兩個字節。我用BufferedOutputStream替換它,現在它按預期工作。
的https: //github.com/SwiftyJSON/SwiftyJSON#initialization:JSON()需要一個JSON對象,而不是一個字符串。使用JSON(數據:) – Stefan