2016-09-15 3 views
0

Я хочу разобрать этот JSON, на верхнем уровне входящий JSON - это массив, как можно получить доступ к информации словаря в массиве?JSON Структура для синтаксического анализа данных JSON

[ 
     { 
     "id": 1, 
     "name": "Leanne Graham", 
     "username": "Bret", 
     "email": "[email protected]", 
     "address": { 
      "street": "Kulas Light", 
      "suite": "Apt. 556", 
      "city": "Gwenborough", 
      "zipcode": "92998-3874", 
      "geo": { 
      "lat": "-37.3159", 
      "lng": "81.1496" 
      } 
     }, 
     "phone": "1-770-736-8031 x56442", 
     "website": "hildegard.org", 
     "company": { 
      "name": "Romaguera-Crona", 
      "catchPhrase": "Multi-layered client-server neural-net", 
      "bs": "harness real-time e-markets" 
     } 
     } 
] 

это мой код, но я не знаю, как определить данные словаря.

func profileFromJSONData(data : NSData) -> ProfileResult { 

     do{ 
      let jsonObject : [[String:AnyObject]] 
      = try NSJSONSerialization.JSONObjectWithData(data, options: []) as! [[String:AnyObject]] 

      for profileJSON in jsonObject { 
       if let profile = profileFromJsonObject(profileJSON) { 
        finalProfile.append(profile) 
       } 
      } 
      return .Success(finalProfile) 
     } 
     catch let error { 
      return .Failure(error) 
     } 

    } 

это мой метод profileFromJsonObject для разбора JSON в экземпляр профиля

func profileFromJsonObject(json: [String:AnyObject]) -> UserProfile?{ 

     guard let 
      id = json["id"] as? Int, 
      name = json["name"] as? String, 
      userName = json["username"] as? String, 
      email = json["email"] as? String, 
      address = json["address"] as? NSDictionary, 
      phone = json["phone"] as? String, 
      website = json["website"] as? String, 
      company = json["company"] as? NSDictionary 
      else { 
       return nil 
     } 

    let obj = UserProfile(id: id, name: name, userName: userName, email: email, address: address, phone: phone, website: website, company: company) 
     return obj 
    } 
+0

Я вызов profileFromJsonObject функция не profileFromJSONData. – ava

+0

в функции profileFromJsonObject Я разбираю массив json в экземпляре профиля. – ava

+0

Показать метод 'ПрофильFromJsonObject'. –

ответ

1

Я попробовал ваш JSON, приняв его в локальный файл, и я могу разобрать на модели объекта следующим способом. Вы просто кладете удаленный JSON в моем коде, я надеюсь, что он будет работать

func getTheLocalJSON() 
{ 
    let filePath = NSBundle.mainBundle().pathForResource("test", ofType: "json"); 
    let data = NSData.init(contentsOfFile: filePath!); 

    var json : NSArray! 
    do{ 
     json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSArray; 
    }catch{ 

    } 

    print("json \(json)"); 

    let dictResponse = json.objectAtIndex(0) as! NSDictionary; 

    let objUser = profileFromJsonObject(dictResponse)! as UserProfile; 

    print("user : \(objUser)"); 

    //Code to access company name and show it as screen title 
    self.title = (objUser.company)!["name"] as? String; 

    lblCompanyname.text = (objUser.company)!["name"] as? String; 
    lblCatchPhrase.text = (objUser.company)!["catchPhrase"] as? String; 
    lblbs.text = (objUser.company)!["bs"] as? String; 

} 

func profileFromJsonObject(json: NSDictionary) -> UserProfile?{ 

    guard let 
     id = json["id"] as? Int, 
     name = json["name"] as? String, 
     userName = json["username"] as? String, 
     email = json["email"] as? String, 
     address = json["address"] as? NSDictionary, 
     phone = json["phone"] as? String, 
     website = json["website"] as? String, 
     company = json["company"] as? NSDictionary 
     else { 
      return nil 
    } 

    let obj = UserProfile(id: id, name: name, userName: userName, email: email, address: address, phone: phone, website: website, company: company) 

    return obj 
} 

Выход:

enter image description here

+0

это хорошо работает, но как доступ к адресному или фирменному словарю для подробного просмотра этой детали? – ava

+0

Вы можете использовать это для доступа к словарю: print ("название компании: \ ((objUser.company)! [" Name "])"); – Janmenjaya

+0

Да, это отличный способ получить доступ к данным словаря и решить мою проблему. – ava