前提・実現したいこと
SwiftのJSON Serializationを使って、JSON形式のデータを[String: Any]型の辞書に変換したいです。
発生している問題・エラーメッセージ
- APIから取得したデータを解析させたいのですが、日本語のみUnicodeのコードポイントで表示されてしまいます。
- データの一部の書式が変更されてしまいます。
例:"address1" : "三重県" → "addresss1" = "\U4e09\U91cd\U770c";
該当のソースコード
Swift
1 //jsonDataにAPIからのレスポンス(data)を渡す 2 func jsonDataToDictionary(jsonData: Data){ 3 do{ 4 let dic = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String: Any] 5 print(dic) 6 }catch{ 7 print(error.localizedDescription) 8 } 9 }
console
1//コンソールの出力 2["results": <__NSArrayI 0x600000dcc810>( 3{ 4 address1 = "\U4e09\U91cd\U770c"; 5 address2 = "\U591a\U6c17\U90e1\U5927\U53f0\U753a"; 6 address3 = "\U5ddd\U5408"; 7 kana1 = "\Uff90\Uff74\Uff79\Uff9d"; 8 kana2 = "\Uff80\Uff77\Uff78\Uff9e\Uff9d\Uff75\Uff75\Uff80\Uff9e\Uff72\Uff81\Uff6e\Uff73"; 9 kana3 = "\Uff76\Uff9c\Uff72"; 10 prefcode = 24; 11 zipcode = 5192412; 12}, 13{ 14 address1 = "\U4e09\U91cd\U770c"; 15 address2 = "\U591a\U6c17\U90e1\U5927\U53f0\U753a"; 16 address3 = "\U6edd\U5e83"; 17 kana1 = "\Uff90\Uff74\Uff79\Uff9d"; 18 kana2 = "\Uff80\Uff77\Uff78\Uff9e\Uff9d\Uff75\Uff75\Uff80\Uff9e\Uff72\Uff81\Uff6e\Uff73"; 19 kana3 = "\Uff80\Uff77\Uff8b\Uff9b"; 20 prefcode = 24; 21 zipcode = 5192412; 22} 23) 24, "message": <null>, "status": 200]
sample
1//APIのレスポンスサンプル 2{ 3 "message": null, 4 "results": [ 5 { 6 "address1": "北海道", 7 "address2": "美唄市", 8 "address3": "上美唄町協和", 9 "kana1": "ホッカイドウ", 10 "kana2": "ビバイシ", 11 "kana3": "カミビバイチョウキョウワ", 12 "prefcode": "1", 13 "zipcode": "0790177" 14 }, 15 { 16 "address1": "北海道", 17 "address2": "美唄市", 18 "address3": "上美唄町南", 19 "kana1": "ホッカイドウ", 20 "kana2": "ビバイシ", 21 "kana3": "カミビバイチョウミナミ", 22 "prefcode": "1", 23 "zipcode": "0790177" 24 } 25 ], 26 "status": 200 27}
試したこと
構造体を事前に作成し、JSONDecoderを使って解析する
日本語含め問題なく解析できましたが、後々、JsonDataToDictionary() を汎用的に使用したいという目標が達成できませんでした(マップ先の構造体を引数で指定したかったが、上手くできず)。
補足情報(FW/ツールのバージョンなど)
使用しているAPIはこちらです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。