티스토리 뷰

반응형

1탄 : 왕초보를 위한 JSON Parsing - 1 (JSON이란?)

2탄 : 왕초보를 위한 JSON Parsing - 2(JSON 가져오기)


그리고 드디어 3탄!! JSON파싱을 해볼거에요 :)

저번시간에 이어서 person.json을 파싱할거기 때문에, 2탄을 먼저 보고 와야겠죠? :) (2탄을 보려면 1탄을 봐야한다는 사실...ㅎㅎ)




왕초보를 위한 JSON Parsing -3 (JSON 파싱)





자, 저번시간에 딱


여기까지 했는데, 

이제 저 JSON내용을 "파싱"해야겠죠? 이대로 저 데이터를 쓸 수 없으니까요 :)


자, 이제부터 조금 복잡해질거에요 XD..

그러니까 정신 바짝차리고 따라오셔야해요.



자!! 일단 JSON파싱에 앞서서 가장 중요한 개념을 가르쳐드릴게요.


위 예제를 이용해서 설명드릴건데, 이것만 이해하시면 모든 JSON파일을 파싱하실 수 있게 될거에요 :)

자, person.json을 다시한번 봅시다. 

2탄에서도 계속 언급했다시피, person.json의 전체적인 구조는 Swift로 나타내면 ["person": Any ]에요. 1탄에서도 언급했다시피, json은 name-value의 쌍인데, 이 value에는 array, 객체, 기본 데이터타입들이 올 수 있다고 했었죠? 

위에서는 array. 즉, 배열이 왔으므로 Swift에서는 Any로 나타낼 수 있겠네요.


그래서 우리는 [String:Any]로 가져왔죠. 하지만, 우리가 진짜 접근하고 싶은 정보는 "person"을 키로가지는 value들, 즉 name, age, employed인데 이 상태로는 접근할 수 없어요.

왜냐? 우리는 전체적인 구조만 가져왔기 때문이죠.

즉!! 우리는 저 "person"의 value. 즉, Any를 파싱해야하는것이죠.

그럼 Any는 뭘로 이루어져있을까요?

Any부분만 보자면, [[ String : String ]]이렇게 나타낼 수 있겠네요.

그러니까 우리는 저 person의 value에 해당하는 것들을  [[ String : String ]]로 가져와야합니다. 


if let person =  persons["person"] as? [[String: String]]{


persons에는 우리가 아까 person.json에서 가져온 전체적인 내용이 들어있죠? 또한, Swift에서는 Dictionary이름["키값"]으로 value를 접근할 수 있다는 것. 아시죠? json파싱을 위해서는 Swift의 Dictionary구조에 대한 이해가 필수입니다. 만약 헷갈리시거나 아직 잘 모르시는 분들은 여기에가셔서 Swift의 Dictionary에 대해 알아보세요 :)


아무튼, persons의 "person"을 키값으로 하는 value들을 [[String:String]]으로 가져오겠다! 이소리인거죠. 

person을 출력해볼까요? 


와!! "person"을 키값으로 가지는 value들이 이렇게 쫙 나왔네요. 역시 배열안에 Dictionary가 들어있는 구조이구요.



그럼 이제 어떻게 하면 될까요? 

어렵게 생각하지마세요. 배열이 있는데, 그 안에 Dictionary가 2개가 있어요.

위에서도 말씀드렸다시피, Dictionary는 키값을 이용해 값을 얻어올 수 있다고 그랬죠?

그럼 for문을 통해 배열을 돌면서, Dictionary의 키값을 이용해 값을 얻어와봅시다.

그 전에! name, age, 그리고 employed를 저장할 배열을 하나 만들어줄게요.

var ageArr = [String]()

var nameArr = [String]()

var employedArr = [String]()


그리고, 


if let person = persons["person"] as? [[String: Any]]{

    for personIndex in person {

        nameArr.append(personIndex["name"] as! String)

        ageArr.append(personIndex["age"] as! String)

        employedArr.append(personIndex["employed"] as! String)

    }

}


이렇게 for문을 돌면서 키값을 가지고 값을 얻어오면!



짠!!!  우리가 원하는 정보들을 가져왔네요 :) 

어때요? JSON파싱 어려우신가요? 

어려우시다면..제가 설명을 잘 못한 탓입니다...ㅠㅠ 만약 4탄으로 돌아올 계획인데 혹시 이때까지 궁금하신점이 있다면

댓글이나 채널을 이용해서 질문해주세요! 

오늘도 도움이 되었으면 좋겠어요 ❤️


반응형