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替换它,现在它按预期工作。
你应该得到的字符串中的NSData
,并用它初始化的JSON对象,这里有一个例子:
let dataString : NSString = "{\"result\":\"success\"}"
if let dataFromString = dataString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
print(json["result"])
}
好吧,我发现问题出在数据中。你的dataString包含20个字节(如预期),而我的包含22个字节。我不知道这些额外的2字节来自哪里.. –
我不知道这一点,但我想2个字节不会有这种影响,该服务可能已经返回多余的空间或东西,无论如何你有没有测试过我的数据为例子? –
是的,你的例子有效。我试图从我的数据中删除前两个字节,然后我的代码也起作用。字节是0x0014。我会编辑我的问题来解决这个问题。 –
您应该构造JSON
与init(data:)
构造函数与NSData
。
尝试:
let json = JSON(data: data)
这不起作用 –
的https: //github.com/SwiftyJSON/SwiftyJSON#initialization:JSON()需要一个JSON对象,而不是一个字符串。使用JSON(数据:) – Stefan