Swift3不能很好地使用我的JSON文件

时间:2017-07-07 14:06:40

标签: json xcode swift3

我有以下代码:

let urlString = "https://str8red.com/jsonoverallleaderboard/"

let url = URL(string: urlString)
URLSession.shared.dataTask(with:url!) { (data, response, error) in
    if error != nil {
        print("there was an error")
        print(error)
    } 
    do {  
        let parsedData = try JSONSerialization.jsonObject(with: data!) as! [String:Any]
    } catch let error as NSError {
        print(error)
    }
}        
}.resume()

在“let parsedData”行中返回以下错误:

Could not cast value of type '__NSArrayI'

使用的JSON iIam来自网站https://str8red.com/jsonoverallleaderboard/,格式如下:

[["shanu", "1056"], ["snookro", "828"], ["tingeypa", "709"], ["shaun", "620"], ["chrakers", "506"]]

如果它有助于最终游戏使用JSON并按如下方式映射:

players = jsonPlayers.map { Player(name: $0[0], score: $0[1]) }

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的JSON数据不属于[String:Any]类型。相反,它是[[String]]

以下将完成这项工作:

let parsedData = try JSONSerialization.jsonObject(with: data!) as! [[String]]

但这是解析JSON数据的一种方便方法。

enum JSONError: String, Error {
    case NoData = "ERROR: no data"
    case ConversionFailed = "ERROR: conversion from JSON failed"
}

typealias myJSONObjectType = [[String]]  // change this according to your data type that is in your JSON

func parseJSON(fromPath jsonURLString:String) {
    guard let jsonURL = URL(string: jsonURLString) else {
        print("Error creating an URL from \(jsonURLString)")
        return
    }
    URLSession.shared.dataTask(with: jsonURL) { (data, response, error) in
        do {
            guard let data = data else {
                throw JSONError.NoData
            }
            guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? myJSONObjectType else {
                throw JSONError.ConversionFailed
            }
            print(json)
        } catch let error as JSONError {
            print(error.rawValue)
        } catch let error as NSError {
            print(error.debugDescription)
        }
        }.resume()
}

并使用它:

object.parseJSON(fromPath: "https://str8red.com/jsonoverallleaderboard/")