JSONSerializationというクラスがあってこれを使う。
JSONの文字列からオブジェクト(ArrayやDictionary)に変換する。
let jsonStr = "[ { \"name\":\"山田太郎\", \"age\":22 }, { \"name\":\"山田花子\", \"age\":24 } ]"
// JSON文字列をNSDataに変換
let jsonData = jsonStr.data(using: String.Encoding.utf8)
do {
// DataからJSONオブジェクトに変換
let json = try JSONSerialization.jsonObject(with: jsonData!, options: .mutableLeaves) as! Array<Dictionary<String, Any>>
for item in json {
if let name = item["name"], let age = item["age"] {
print("\(name):\(age)")
}
}
} catch {
}
オブジェクトをJSON(文字列)に変換する。オブジェクトは、NSArray、NSDirctionaryでその中の値は、NSString、NSNumber、NSDictionary、NSNullでNSDictionaryのキーはNSStringじゃないといけない。
let json = [
[ "name":"山田太郎", "age":22 ],
[ "name":"山田花子", "age":24 ]
]
do {
if JSONSerialization.isValidJSONObject(json) { // JSONに変換できるかチェック
// JSONに変換(.prettyPrintedを指定すると見やすいように改行や空白が挿入される。)
let jsonData = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
// ↓こっちだと空白や改行が含まれない
// let jsonData = try JSONSerialization.data(withJSONObject: json, options: [])
// Dataを文字列に変換する。
let jsonStr = String.init(data: jsonData, encoding: .utf8)
if let str = jsonStr {
print(str)
}
}
} catch {
}