gpt4 book ai didi

json - Swifty Json 变得不为人知但很长的路要走吗?

转载 作者:搜寻专家 更新时间:2023-11-01 06:23:19 25 4
gpt4 key购买 nike

我正在尝试使用 SwiftyJson 提取一些 JSON 数据。不寻常的是“println(json)”表示“未知”,而如果我以常规方式提取 JSON 数据,它就可以正常工作——“println(pop)”表示中等,正如预期的那样。下面是我正在使用的代码。我开始裁剪部分,直到我到达“println(json)”,然后决定尝试手动处理它,看看它是 SwiftyJson 还是我。有什么建议么?我是 iOS 编程的新手,所以我假设我在某种程度上是愚蠢的。

    var ghostlandsJsonUrl: NSURL = NSURL(string: "http://us.battle.net/api/wow/realm/status?realm=Ghostlands")!
var jsonData: NSData!

var request: NSURLRequest = NSURLRequest(URL: ghostlandsJsonUrl)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)

let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
jsonData = data
if(jsonData != nil) {
let json = JSON(jsonData)
println(json)
} else {
println("jsonData: nil value... net down again?")
}

let jsonObject : AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil)
if let statuses = jsonObject as? NSDictionary{
if let realms = statuses["realms"] as? NSArray{
if let realm = realms[0] as? NSDictionary{
if let pop = realm["population"] as? NSString{
println(pop)
}
}
}
}

});
task.resume()

最佳答案

查看 SwiftyJSON source code我可以看到 JSON 是一个简单的 struct。它实现了 Printable protocol .支持 print 方法。

public var description: String {
if let string = self.rawString(options:.PrettyPrinted) {
return string
} else {
return "unknown"
}
}

这意味着 rawString 方法出于某种原因返回 nil

public func rawString(encoding: UInt = NSUTF8StringEncoding, options opt: NSJSONWritingOptions = .PrettyPrinted) -> String? {
switch self.type {
case .Array, .Dictionary:
if let data = self.rawData(options: opt) {
return NSString(data: data, encoding: encoding)
} else {
return nil
}
case .String:
return (self.object as String)
case .Number:
return (self.object as NSNumber).stringValue
case .Bool:
return (self.object as Bool).description
case .Null:
return "null"
default:
return nil
}
}

由于您是 iOS 开发的新手,我会告诉您构造函数不需要 NSData 对象。

这是来源:

public var object: AnyObject {
get {
return _object
}
set {
_object = newValue
switch newValue {
case let number as NSNumber:
if number.isBool {
_type = .Bool
} else {
_type = .Number
}
case let string as NSString:
_type = .String
case let null as NSNull:
_type = .Null
case let array as [AnyObject]:
_type = .Array
case let dictionary as [String : AnyObject]:
_type = .Dictionary
default:
_type = .Unknown
_object = NSNull()
_error = NSError(domain: ErrorDomain, code: ErrorUnsupportedType, userInfo: [NSLocalizedDescriptionKey: "It is a unsupported type"])
}
}
}

所以你应该将未序列化的 NSData 传递给它:

if let jsonData = data {
//jsonData can't be nil with this kind of if

let jsonObject : AnyObject! = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil)
let json = JSON(jsonObject)
println(json)
//...

关于json - Swifty Json 变得不为人知但很长的路要走吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29533899/

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