[iOS] 프로젝트에서 JSON 파일을 얻는 방법
개요
자신이 최근에 한 일을 비망록으로 씁니다.
ios 앱으로 미리 준비한 JSON 파일을 로드하고 표시하는 것을 했으므로 정리합니다.
환경
・mac
・Xcode(Version 12.0.1)
· Swift UI
JSON 파일 준비
이번에는 아래의 JSON을 준비하여 사용했습니다.
{
"GoodMorning":"good morning",
"Hello":"hello",
"GoodEvening":"Good evening",
"Test": {
"Name":"name",
"PassWord":"password"
}
}
JSON 파일을 만든 후 프로젝트에 배치합니다.
데이터 모델 만들기
준비한 JSON 파일에 있던 데이터 모델을 만듭니다.
import Foundation
struct SampleModel: Codable {
let goodMorning, hello, goodEvening: String
let test: Test
enum CodingKeys: String, CodingKey {
case goodMorning = "GoodMorning"
case hello = "Hello"
case goodEvening = "GoodEvening"
case test = "Test"
}
}
struct Test: Codable {
let name, passWord: String
enum CodingKeys: String, CodingKey {
case name = "Name"
case passWord = "PassWord"
}
}
이 데이터 모델이지만 쉽게 만들어주는 서비스가 있으므로 이번에는 그것을 사용하여 만들었습니다.
htps : // 쿠이 CKTY ぺ. 이오/
JSON에서 얻은 데이터를 객체로 변환
JSON 파일과 JSON에 대한 데이터 모델이 준비되면 JSON을 호출하여 실제로 사용할 수 있도록 처리를 작성합니다.
import Foundation
func ReadJson() throws -> SampleModel?{
//①JSONファイルのパスを取得
guard let path = Bundle.main.path(forResource: "sample", ofType: "json") else {
return nil
}
//②パスからJSONファイルのデータを取得
let url = URL(fileURLWithPath: path)
//③JSONDecoder()を使用してデータモデルのSampleModelオブジェクトに変換する
let sampleData = try? JSONDecoder().decode(SampleModel.self, from: Data(contentsOf: url))
return sampleData
}
ReadJson()이라는 함수를 작성해, return로서 데이터 모델로 작성한 SampleModel 오브젝트에 변환해 돌려주도록(듯이) 하고 있습니다.
①로 쓴 패스의 취득입니다만,Bundle.main.path
로 취득할 수 있는 것은 어플리케이션 번들에 있는 것 밖에 취득할 수 없는 것 같습니다.
테스트 코드를 작성할 때 테스트 번들에서 JSON 경로를 얻고 싶을 때
let testBundle = Bundle(for: type(of: self))
let path = testBundle().url(forResource: "sample", withExtension: "json")
처럼 쓰면 얻을 수 있습니다.
③에서 사용하고 있는 JSONDecoder()는, JSON으로부터 취득한 데이터를 데이터 모델로 쓴 오브젝트의 형태로 변환해 주는 것 같습니다.
화면에 표시해 보기
이번에는 JSON에서 제대로 취득할 수 있을까라는 곳만을 확인하고 싶었기 때문에 Text로서 나열해 보았습니다.
struct ContentView: View {
let text: SampleModel = try! ReadJson()!
var body: some View {
Text(text.goodMorning)
Text(text.hello)
Text(text.goodEvening)
Text(text.test.name)
Text(text.test.passWord)
}
}
위를 추가한 후 빌드해 보면
제대로 얻을 수 있네요.
마지막으로
이번 첫 투고입니다.
자신의 비망록의 생각으로 쓰고 있습니다만, 자신 이외의 사람이 읽어도 아는 기사가 되어 있는지가 솔직히 불안합니다…
앞으로도 정기적으로 써서 여러분이므로 그때마다 정진해 나갈 것입니다.
Reference
이 문제에 관하여([iOS] 프로젝트에서 JSON 파일을 얻는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miya148/items/48dd5c7ca97f4e0cd04b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
・mac
・Xcode(Version 12.0.1)
· Swift UI
JSON 파일 준비
이번에는 아래의 JSON을 준비하여 사용했습니다.
{
"GoodMorning":"good morning",
"Hello":"hello",
"GoodEvening":"Good evening",
"Test": {
"Name":"name",
"PassWord":"password"
}
}
JSON 파일을 만든 후 프로젝트에 배치합니다.
데이터 모델 만들기
준비한 JSON 파일에 있던 데이터 모델을 만듭니다.
import Foundation
struct SampleModel: Codable {
let goodMorning, hello, goodEvening: String
let test: Test
enum CodingKeys: String, CodingKey {
case goodMorning = "GoodMorning"
case hello = "Hello"
case goodEvening = "GoodEvening"
case test = "Test"
}
}
struct Test: Codable {
let name, passWord: String
enum CodingKeys: String, CodingKey {
case name = "Name"
case passWord = "PassWord"
}
}
이 데이터 모델이지만 쉽게 만들어주는 서비스가 있으므로 이번에는 그것을 사용하여 만들었습니다.
htps : // 쿠이 CKTY ぺ. 이오/
JSON에서 얻은 데이터를 객체로 변환
JSON 파일과 JSON에 대한 데이터 모델이 준비되면 JSON을 호출하여 실제로 사용할 수 있도록 처리를 작성합니다.
import Foundation
func ReadJson() throws -> SampleModel?{
//①JSONファイルのパスを取得
guard let path = Bundle.main.path(forResource: "sample", ofType: "json") else {
return nil
}
//②パスからJSONファイルのデータを取得
let url = URL(fileURLWithPath: path)
//③JSONDecoder()を使用してデータモデルのSampleModelオブジェクトに変換する
let sampleData = try? JSONDecoder().decode(SampleModel.self, from: Data(contentsOf: url))
return sampleData
}
ReadJson()이라는 함수를 작성해, return로서 데이터 모델로 작성한 SampleModel 오브젝트에 변환해 돌려주도록(듯이) 하고 있습니다.
①로 쓴 패스의 취득입니다만,
Bundle.main.path
로 취득할 수 있는 것은 어플리케이션 번들에 있는 것 밖에 취득할 수 없는 것 같습니다.테스트 코드를 작성할 때 테스트 번들에서 JSON 경로를 얻고 싶을 때
let testBundle = Bundle(for: type(of: self))
let path = testBundle().url(forResource: "sample", withExtension: "json")
처럼 쓰면 얻을 수 있습니다.
③에서 사용하고 있는 JSONDecoder()는, JSON으로부터 취득한 데이터를 데이터 모델로 쓴 오브젝트의 형태로 변환해 주는 것 같습니다.
화면에 표시해 보기
이번에는 JSON에서 제대로 취득할 수 있을까라는 곳만을 확인하고 싶었기 때문에 Text로서 나열해 보았습니다.
struct ContentView: View {
let text: SampleModel = try! ReadJson()!
var body: some View {
Text(text.goodMorning)
Text(text.hello)
Text(text.goodEvening)
Text(text.test.name)
Text(text.test.passWord)
}
}
위를 추가한 후 빌드해 보면
제대로 얻을 수 있네요.
마지막으로
이번 첫 투고입니다.
자신의 비망록의 생각으로 쓰고 있습니다만, 자신 이외의 사람이 읽어도 아는 기사가 되어 있는지가 솔직히 불안합니다…
앞으로도 정기적으로 써서 여러분이므로 그때마다 정진해 나갈 것입니다.
Reference
이 문제에 관하여([iOS] 프로젝트에서 JSON 파일을 얻는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miya148/items/48dd5c7ca97f4e0cd04b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([iOS] 프로젝트에서 JSON 파일을 얻는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/miya148/items/48dd5c7ca97f4e0cd04b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)