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) 
     } 

    } 

그것은 내가 로컬 파일에 그것을 복용하여 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

in profileFromJsonObject 함수 나는 json 배열을 프로파일 인스턴스로 구문 분석합니다. – ava

+0

'profileFromJsonObject'메서드를 표시하십시오. –

답변

1

프로필 인스턴스로 구문 분석 JSON 내 profileFromJsonObject 방법이다, 나는 방법을 다음 모델 객체로 구문 분석 할 수 있어요. 당신은 내 코드에서 원격 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