69557


Swiftの辞書型をJSONに変換したいと考えています。

以下のURLにて、JSONSerializationを使用して辞書型をJSONに変換している例を見かけたので試してみました。

[How to create JSON from a dictionary in Swift 4? | Apple Developer
Forums](https://developer.apple.com/forums/thread/92806)

>
[code]

>     var messageDictionary : [String: Any] = [ "sender":
> "system1@example.com", "recipients":"system2@example.com", "data": [ "text":
> "Test Message" ], ]
>     let jsonData = try JSONSerialization.data(withJSONObject:
> messageDictionary, options: [])
>     let jsonString = String(data: jsonData, encoding:
> String.Encoding.ascii)!
>     print (jsonString)
>  
[/code]

すると、以下のようなエラーが出ます。

[code]

    Use of unresolved identifier 'JSONSerialization'
    
[/code]

ライブラリのようなものをimportする必要があるのでしょうか？  
Swift5を使用しています。


CC BY-SA 4.0
2020-08-14T11:26:28.413
69552
2020-08-14T14:49:47.377
2020-08-14T11:31:03.860
3060
36446
question
swift json swift5
SwiftでUse of unresolved identifier 'JSONSerialization'というエラーが出る


Swiftでは、「Swift標準ライブラリ」(Swift Standard
Library)以外のライブラリ(フレームワーク)に定義されている機能を使うためには、必ず`import`文が必要です。

(絶対に綴り間違いがないはずなのに、「Use of unresolved identifier」が出たときは、チェック項目の一つとして考えて下さい。)

`import 何`とすれば良いかを調べる場合には、公式サイトなどを参照して下さい。

[`JSONSerialization`](https://developer.apple.com/documentation/foundation/jsonserialization)

> ### Framework
>
> Foundation

(PC版で閲覧しているなら、画面の右サイドに記載されているはずです。)

## ソースファイルに`import Foundation`を追加して下さい。

* * *

なお、`Foundation`は、Apple製のフレームワークで使われている様々な基本的データ型が定義されており、そのために別のフレームワークから間接的に参照されています。

例えば、`import UIKit`が記述されているソースファイル内で、`JSONSerialization`を使用する場合には、あらためて`import
Foundation`を記述する必要はありません。  
私がここスタックオーバーフローに過去書いたコードを含め、ソースコードを示す場合に`import`文をわざわざ書かないことはよくあります。どのような`import`文を書く必要があるのかはご自身で調べることが出来るようにした方が良いでしょう。

* * *

ちなみにバイナリー形式のJSON(`jsonData`)をテキスト形式に変換すべき場合に指定すべきエンコーディングは`.utf8`です。ASCII以外の文字の存在が意識にない人たちや、中途半端に文字コードの知識がある人たちが(この例の場合にはASCII文字しか現れていないからと)時々`.ascii`を使った例を書くことがありますが、そのまま使ったりしないようにして下さい。

[code]

    let jsonString = String(data: jsonData, encoding: .utf8)! //<- ここは`.utf8`でないといけない
    
[/code]


CC BY-SA 4.0
2020-08-14T14:49:47.377
69557
2020-08-14T14:49:47.377
13972
69552
answer