SwiftUIで、Stringに入っているJSONを処理する場合JSONDecoderで構造体にdecodeして利用します。Swiftコード内に下記のJSON文字列を用意します。
let timeTraveller_json:String = """ { "morlock" : {"Eloi":"🦄 Weena 🌸" } """
上のJSON文字列と同じような構造体を作成します。
struct TTimeTraveller : Decodable { struct TMorlock : Decodable { var Eloi: String? } var morlock : TMorlock }
構造体の派生元はDecodableにする必要があるようでした。この例ではTMorlockはTTimeTravellerの中に書きましたが分けても問題ないようです。
Viewを作成し、Button アクションの中に「“Eloi”:”🦄 Weena 🌸”」を呼び出せるようにし、Text表示させます。
struct StringJSON: View { let timeTraveller_json:String = """ { "morlock" : {"Eloi":"🦄 Weena 🌸", "JapaneseName": "ウィーナ"} } """ @State var s1: String = "" var body: some View { VStack{ Text(self.s1) Button("Button1", action: { do { let model1 = try JSONDecoder().decode(TTimeTraveller.self, from: self.timeTraveller_json.data(using: .utf8)! ) self.s1 = model1.morlock.Eloi! } catch { } }) Spacer() } } }
JSON文字列に「“JapaneseName”: “ウィーナ”」を追加しました。使わなければ問題ありません。その反対の構造体側に余計な項目があっても使わない場合エラーにはなりませんでした。
struct TMorlock : Decodable { var Eloi: String? var JapaneseName: String? }
TMorlockにJapaneseNameを追加すればその項目も利用できます。