2016-08-08 4 views
2

У меня есть работа json data parsing array коды, но я хочу изменить его на Dictionary разбор. Мой новый файл JSONSwift Json анализ данных без массива

{ 
    "Id": 450, 
    "Name": "NameforItem", 
    "Image": "234234.jpg" 
} 

Мой старый файл JSON работая успех

[{ 
    "Id": 450, 
    "Name": "NameforItem", 
    "Image": "234234.jpg" 
}] 

Мои разборе коды.

/// Convert JSON data into array 
    private func getFromJSON(jsonData: NSData) throws -> [Place] { 
     var places = [Place]() 
     do { 
      if let jsonArray = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .AllowFragments) as? [[String: AnyObject]] { 
       for i in jsonArray { 
        var properties = [String: AnyObject]() 
        properties[placeJSONKeys.Id] = i[placeJSONKeys.Id] 
        properties[placeJSONKeys.Name] = i[placeJSONKeys.Name] 
        let place = Place(properties: properties) 
        places.append(place) 
       } 
      } 
     } catch { 
      throw TMDBErrors.ParsingError 
     } 
     return places 
    } 

Спасибо!

ответ

2

Я предлагаю вам изменить тип возвращаемого значения вашей функции Optional:

private func getFromJSON(jsonData: NSData) throws -> Place? { 
    var place: Place? 
    do { 
     if let json = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .AllowFragments) as? [String: AnyObject] { 
      var properties = [String: AnyObject]() 
      properties[placeJSONKeys.Id] = json[placeJSONKeys.Id] 
      properties[placeJSONKeys.Name] = json[placeJSONKeys.Name] 
      place = Place(properties: properties) 
     } 
    } catch { 
     throw TMDBErrors.ParsingError 
    } 
    return place 
} 

обновленный

private func getFromJSON(jsonData: NSData) throws -> Place? { 
    var place: Place? 
    do { 
     if let json = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .AllowFragments) as? [String: AnyObject] { 


      place = Place(properties: json) 
     } 
    } catch { 
     throw TMDBErrors.ParsingError 
    } 
    return place 
} 
+1

правильный правильный ответ –

+0

@Shadow Of Trying – SwiftDeveloper

+1

@Shadow Of Worked Ty Я скоро его одобрю – SwiftDeveloper

1

Изменение [[String: AnyObject]] с [String: AnyObject], потому что теперь это словарь не массив

do { 
    if let jsonDic = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .AllowFragments) as? [String: AnyObject] { 
     print(jsonDic["Id"]) 
     print(jsonDic["Name"]) 
     print(jsonDic["Image"]) 
    } 
} catch { 
    throw TMDBErrors.ParsingError 
} 
+0

почему вы увеличиваете память, вы можете напрямую обращаться к словарю JSonarray, не нуждаясь в петле здесь? –

Смежные вопросы