2015-07-08 4 views
0

Я пытаюсь получить строку JSON для значения словаря, и я не могу заставить ее работать, я получаю пустое значение. Прежде чем я попытался вытащить данные я проверил, что я получил все JSON, так что, очевидно, что я делаю что-то здесьКак я могу извлечь данные из JSON с помощью swift

let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options:  
    NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 

var items = [[String:String]()] 
var item:AnyObject 

var authorDictionary:AnyObject 

for var i = 0; i < jsonResult["item"]?.count; i++ { 
       items.append([String:String]()) 
       item = (jsonResult["items"] as? [[NSObject:AnyObject]])! 
       items[i]["content"] = item["content"] as? String 
       items[i]["title"] = item["title"] as? String 
       items[i]["publishedDate"] = item["published"] as? String 
       authorDictionary = item["author"] as! NSDictionary 
       items[i]["author"] = item["displayName"] as? String 
} 
println(items) 

Вот что я получил в результате: [[:]]

Я новичок в JSON, может кто-нибудь объяснить мне, что я должен делать и что я сделал неправильно?

+0

Можете ли вы показать свой JSON? Я предполагаю, что корневой объект не является словарем, содержащим массив 'item' – Paulw11

ответ

0

Вы можете выполнить итерацию непосредственно над jsonResult["items"], если он имеет тип объявления (массив словарей).

Тогда внутри цикла вы должны создать новый словарь каждый раз, заполнить этот словарь с данными вы захватить из ответа JSON, то добавить новый словарь в свой items массив словарей:

var items = [[String:String]]() 

for item in jsonResult["items"] as! [[String:AnyObject]] { 
    var newDict = [String:String]() 
    newDict["content"] = item["content"] as? String 
    newDict["title"] = item["title"] as? String 
    newDict["publishedDate"] = item["published"] as? String 
    newDict["author"] = item["displayName"] as? String 
    items.append(newDict) 
} 

Что касается authorDictionary, так как это простой словарь, а не массив, если вы назначаете ему значение в цикле, оно будет перезаписываться каждый раз, и все, что у вас будет, в конце концов, является автором последнего объекта.

0

Проверить это

 let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 



      var items = [[String:String]()] 
      var item:AnyObject 
      var authorDictionary:AnyObject 

      for var i = 0; i < jsonResult["items"]!.count; i++ 
      { 
       items.append([String:String]()) 

       item = (jsonResult["items"] as! [NSDictionary])[i] 

       items[i]["content"] = item["content"] as! NSString as String 

       items[i]["title"] = item["title"] as! NSString as String 

       items[i]["publishedDate"] = item["published"] as! NSString as String 

       authorDictionary = item["author"] as! NSDictionary 

       items[i]["author"] = authorDictionary["displayName"] as! NSString as String 
      } 

      println(items)