gpt4 book ai didi

json - SwiftyJSON 字符串值为空

转载 作者:可可西里 更新时间:2023-11-01 01:39:02 25 4
gpt4 key购买 nike

我在 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 服务中使用的 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"])
}

阅读更多:SwiftyJSON - initialization

关于json - SwiftyJSON 字符串值为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32490870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com