快速解析双 JSON 编码数组并访问它
Posted
技术标签:
【中文标题】快速解析双 JSON 编码数组并访问它【英文标题】:Parsing a double JSON encoded array in swift and accessing it 【发布时间】:2015-05-15 15:57:56 【问题描述】:我需要将一个数组中的 10 个数组从 JSON 解析为 swift 并访问它。我可以通过 REST API 获取数据并在控制台上打印出来,但我不知道如何实际保存它以进行处理。
JSON 数组结构:
[[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge],
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge],
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge],
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge],
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge],
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge],
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge],
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge],
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge],
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge]]
这些数组基本上返回整数和字符串。
如何以相同的样式保存这些(数组中的数组)并访问它们?
这是我到现在为止的代码:
@IBAction func buttonLoad(sender: AnyObject)
// Setting up the URL
let myUrl = NSURL(string: "http://hugelol.com/api/front.php");
// Request
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
data, response, error in
if error != nil
println("error=\(error)")
return
// Prints server response
println("response = \(response)")
// Prints the double array
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("responseString = \(responseString)")
task.resume()
我尝试了许多不同的方法,但很难理解如何做到这一点。我也尝试过 swiftyJSON,但我仍然不知道如何将数据保存到 swift 数组中。我差点把头撞到墙上。感谢您的阅读。
【问题讨论】:
我有这样的结果 SwiftyJSONlet str = "[[Lol, Lol, Lol], [Lol, Lol, Lol]]"
; let data = JSON(str)
; println(data); // [[Lol, Lol, Lol], [Lol, Lol, Lol]]
【参考方案1】:
这部分代码应该提供给你预期的结果
....
// Setting up the URL
let myUrl = NSURL(string: "http://hugelol.com/api/front.php");
// Request
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
data, response, error in
if error != nil
println("error=\(error)")
return
if let jsonString = JSON(data: data).rawString() as String?
if let dataFromString = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let json = JSON(data: dataFromString)
// uncomment necessary access method
// for (index: String, subJson: JSON) in json
// println("Arr = \(subJson)")
//
// OR
// println(json[0][0])
task.resume()
....
【讨论】:
谢谢,这会打印出实际的数组。但是,我希望以json[0][0]
形式从中提取单个值,例如,该形式为我提供了第一个数组中的第一项。
我明白你的意思了。实际上响应不是 JSON 数据,它只是带有值的数组。 JSON 有 "key": "value" 格式
有趣。我认为我的数据可能有问题:当我尝试打印某些内容时,例如:let json = JSON(data: data) let items = json[0][0] println(items)
它只是返回了null
或nil
。我将研究如何解决这个问题,但我觉得这可能是一个很大的痛苦。有什么建议可以减轻我的痛苦吗?
我有一个数组,让我检查一下
现在检查一下,我不知道为什么需要双重处理,但它可以工作【参考方案2】:
尝试使用 NSJSONSerialization。它将解析 JSON 并返回一个 NSObject 树。
if let result: AnyObject = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: nil) ...
【讨论】:
如何使用返回的 NSObject 树“结果”?以上是关于快速解析双 JSON 编码数组并访问它的主要内容,如果未能解决你的问题,请参考以下文章