Я хотел бы попросить небольшую помощь.Быстрая итерация по массиву
У меня есть метод, который вызывает веб-сервис и получает от него объект json.
это выглядеть следующим образом:
func wsServiceFeedTst() {
println("WS called...")
println("tstFrames count: " + tstFrames.count.description)
let json = JSON(url:"http://79.172.249.175:7001/RestWebServiceApp/webresources/entity.bkkkallerfeedtst")
println(json)
for (k, v) in json["bkkKallerFeedTst"] {
let dateShow : NSDate? = v["feedDate"].asDate
var finalFormatter = NSDateFormatter()
finalFormatter.dateFormat = "yyyy.MM.dd - HH:mm"
let finalDate = finalFormatter.stringFromDate(dateShow!)
tstFrames.append(TimeFrame(text: v["feedText"].description, date: finalDate, image: nil, routeName: v["feedRouteShName"].description, postId: v["id"].description,routType: v["feedImgType"].description))
}
}
После того, как я получил JSON я пытаюсь перебирать на него и попытаться добавить узлы JSON в другой массив, но когда мой JSON содержит только один элемент это не удалось, потому что мой JSON не является массивом, это линия, где это бросает исключение:
let finalDate = finalFormatter.stringFromDate(dateShow!)
его ждет не обязательно, но получить ноль вызванные этой линии:
let dateShow : NSDate? = v["feedDate"].asDate
это как мой JSON выглядит, когда у него есть только один элемент:
{"bkkKallerFeedTst":{"feedRouteShName":"143","id":"348","feedLat":"47.5998971180592","feedImgType":"3","feedDate":"2015-06-15T14:07:30+02:00","feedLon":"19.0457082953807","feedText":"Itthon :)”}}
И вот как это выглядит, когда он имеет более одного элемента (теперь он имеет два элемента)
{"bkkKallerFeedTst":[{"feedRouteShName":"H5","id":"349","feedLat":"47.5535475845461","feedImgType":"2","feedDate":"2015-06-15T15:27:02+02:00","feedLon":"19.0458004338391","feedText":"Hév ;)"},{"feedRouteShName":"143","id":"348","feedLat":"47.5998971180592","feedImgType":"3","feedDate":"2015-06-15T14:07:30+02:00","feedLon":"19.0457082953807","feedText":"Itthon :)"}]}
Есть ли у кого-нибудь идеи о том, как это решить?
спасибо!
К ответу я создать это:
var bkkKallerFeedTst = json["bkkKallerFeedTst"]
var bkkKallerFeedTstArray : [[NSObject : AnyObject]]
bkkKallerFeedTstArray = []
if bkkKallerFeedTst.isDictionary {
bkkKallerFeedTstArray.append(bkkKallerFeedTst.asDictionary!)
} else {
}
for feed in bkkKallerFeedTstArray {
println(feed["feedRouteShName"]) //now its printing: Optional(143)
}
теперь он это печать:
[feedImgType: 3, feedRouteShName: 143, feedLat: 47.5998971180592, feedText: Itthon :), feedLon: 19.0457082953807, id: 348, feedDate: 2015-06-15T14:07:30+02:00]
UPDATE: это решение ..
var bkkKallerFeedTst = json["bkkKallerFeedTst"]
var bkkKallerFeedTstArray : [JSON]
if bkkKallerFeedTst.isDictionary {
bkkKallerFeedTstArray = [bkkKallerFeedTst] //initialize
} else {
bkkKallerFeedTstArray = bkkKallerFeedTst.asArray!
}
for bkk in bkkKallerFeedTstArray {
let dateShow : NSDate = bkk["feedDate"].asDate!
var finalFormatter = NSDateFormatter()
finalFormatter.dateFormat = "yyyy.MM.dd - HH:mm"
let finalDate = finalFormatter.stringFromDate(dateShow)
tstFrames.append(TimeFrame(text: bkk["feedText"].description, date: finalDate, image: nil, routeName: bkk["feedRouteShName"].description, postId: bkk["id"].description,routType: bkk["feedImgType"].description))
}
Вы можете заявить свой вопрос в одной строке? – Aggressor
мой вопрос в том, как перебирать мой объект json, если он имеет только один узел. – solarenqu
Число пар ключей: значение не имеет значения с итерацией. Итак, есть ли у него 1 или 10, это не имеет значения, его та же логика – Aggressor