我有以下代码:
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]) }
感谢任何帮助。
答案 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/")