Swift, как разобрать сложный JSON?
-
20-12-2019 - |
Вопрос
Вот мой метод анализа JSON
var apiUrl = NSURL(string: "http://127.0.0.1/api.php")
var apiData = NSData.dataWithContentsOfURL(apiUrl, options: NSDataReadingOptions.DataReadingUncached, error: nil)
var apiJson = NSJSONSerialization.JSONObjectWithData(apiData, options: NSJSONReadingOptions.AllowFragments, error: nil)
http://127.0.0.1/api.php
URL вернул данные.
{
"tit":"服务器",
"loc":[
{
"_name":"北京",
"evn":"funckEvent:"
},{
"_name":"英国",
"evn":"funckEvent:"
},{
"_name":"日本",
"evn":"funckEvent:"
},{
"_name":"发过",
"evn":"funckEvent:"
},{
"_name":"中国",
"evn":"funckEvent:"
}
]
}
Как зацикливать массивы JSON?Я хотел бы циклически распечатать содержимое скобок{"_name":"中国","evn":"funckEvent:"}
var loc = apiJson.objectForKey("loc")
Решение
Этот код у меня работает отлично (запуск localhost
сервер, обслуживающий именно этот JSON в 'json.html');однако его не удалось распечатать, пока я не указал конкретный порт (в моем случае NSURL(string: "http://127.0.0.1:8000/json.html")
).Вы пробовали явно указать порт?
Более того, может быть полезно действительно уловить ошибку, возвращаемую dataWithContentsofURL
объявив переменную NSError и передав ее, например:
var error: NSError?
var apiData = NSData.dataWithContentsOfURL(apiUrl, options: NSDataReadingOptions.DataReadingUncached, error: &error)
Чтобы перебрать элемент здесь, вам нужно преобразовать его в массив:
var loc = apiJson.objectForKey("loc") as [AnyObject]
for i in loc {
println(i["_name"])
}
Это напечатает:
北京
英国
日本
发过
中国
Не связан с StackOverflow