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"])
}
我在 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
如果我用
删除两个 byesdataFromString!.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"])
}