这是代码。
func callFire(url:String) {
Alamofire.request(url).responseJSON(completionHandler: {response in
self.parseData(JSONData: response.data!)
})
}
func parseData(JSONData: Data) {
do {
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStandard
if let tracks = readableJSON["tracks"] as? JSONStandard {
if let items = tracks["items"]{
for i in 0..<items.count {
let item = items[i] as! JSONStandard
let name = item["name"] as! String
trackNames.append(name)
self.tableView.reloadData()
}
}
}
}
catch {
print(error)
}
}
这是我收到错误的地方&#34;模糊地使用&#39;下标&#39;&#34;
让item = items [i]为! JSONStandard
答案 0 :(得分:0)
为什么使用JSONStandard?只需将该节点转换为Map或Array即可。如果是地图,你会这样做:
public static int[] longestStreak(boolean[] values) {
Scanner input = new Scanner(System.in);
boolean TorF[] = new boolean[]
if (input == False)
{
System.out.println(TorF.length);
}
else
{
System.out.println(TorF.length);
}
return TorF;
}
然后你可以通过名字来解决问题,例如:
if let tracks = readableJSON["tracks"] as? [String: Any]
BTW,这是来自最近发布的关于处理JSON的this guide Apple。
答案 1 :(得分:0)
以下是您的parseData(JSONData: Data)
看起来应该是这样的
var trackNames = [String]()
func parseData(JSONData: Data) {
do {
if let readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .allowFragments) as? [String: Any],
let tracks = readableJSON["tracks"] as? [String: Any],
let items = tracks["items"] as? [[String: Any]] {
trackNames.append(contentsOf: items.map{$0["name"] as! String})
self.tableView.reloadData()
}
} catch {
print(error)
}
}
有效JSON始终包含[String:Any]
字段,其中Any
可以再次[String:Any]
表示嵌套字典。
这是测试:
let json = "{\"tracks\":{\"items\":[{\"name\":\"a\"},{\"name\":\"b\"},{\"name\":\"c\"}]}}";
var trackNames = [String]()
func parseData(JSONData: Data) {
do {
if let readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .allowFragments) as? [String: Any],
let tracks = readableJSON["tracks"] as? [String: Any],
let items = tracks["items"] as? [[String: Any]] {
trackNames.append(contentsOf: items.map{$0["name"] as! String})
print(trackNames) // prints ["a", "b", "c"]
//self.tableView.reloadData()
}
} catch {
print(error)
}
}
parseData(JSONData: json.data(using: .utf8)!)