SwiftyJSON字符串值为空

问题描述:

我在解析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替换它,现在它按预期工作。

+0

的https: //github.com/SwiftyJSON/SwiftyJSON#initialization:JSON()需要一个JSON对象,而不是一个字符串。使用JSON(数据:) – Stefan

你应该得到的字符串中的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

+0

好吧,我发现问题出在数据中。你的dataString包含20个字节(如预期),而我的包含22个字节。我不知道这些额外的2字节来自哪里.. –

+0

我不知道这一点,但我想2个字节不会有这种影响,该服务可能已经返回多余的空间或东西,无论如何你有没有测试过我的数据为例子? –

+0

是的,你的例子有效。我试图从我的数据中删除前两个字节,然后我的代码也起作用。字节是0x0014。我会编辑我的问题来解决这个问题。 –

您应该构造JSONinit(data:)构造函数与NSData

尝试:

let json = JSON(data: data) 
+0

这不起作用 –