SwiftyJSON 字符串值为空

SwiftyJSON string-value empty

我在 Swift 中解析 JSON 时遇到问题。我使用 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"] failure, It is not an dictionary

编辑2: 我发现问题出在数据中:

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

如果我用

删除两个 byes
dataFromString!.subdataWithRange(NSMakeRange(2, 20))

JSON可以正确解析。

Edit3(我的解决方案):

问题是我在 Java-Service 中使用的 DataOutputStream。它向我的 JSON 添加了两个字节。我用 BufferedOutputStream 替换了它,现在它按预期工作了。

您应该使用 init(data:) 构造函数和 NSData 构造 JSON

尝试:

let json = JSON(data: data)

您应该从字符串中获取 NSData,并用它初始化 JSON 对象,这是一个示例:

let dataString : NSString = "{\"result\":\"success\"}"

if let dataFromString = dataString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
   let json = JSON(data: dataFromString)
    print(json["result"])
}

阅读更多:SwiftyJSON - initialization