Xcode: 7.3.1
Swift: 2.2
import UIKit
class ViewController: UIViewController {
// UITextView
@IBOutlet weak var textView: UITextView!
@IBAction func pushDwonload(sender: AnyObject) {
// アクセスURL
let url = NSURL(string: "http://editors.ascii.jp/c-minamoto/swift/swift-5-data.json")!
let request = NSURLRequest(URL: url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config, delegate: nil, delegateQueue: NSOperationQueue.mainQueue())
var msg:String = ""
let task = session.dataTaskWithRequest(request) { data, response, error in
// メインスレッドで実行される
if let _ = response, data = data {
do {
// JSONをNSDictionaryに変換
let jsonDic = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as! NSDictionary
if let arrayData = jsonDic["data"] as? NSArray {
// 配列のデータを1つずつ辞書データを取り出す
for datN in 0..<arrayData.count {
if let data = arrayData[datN] as? NSDictionary {
// キー"name"の文字データを取り出して、msg変数に追加
if let nameDat = data["name"] as? String{
msg += "名前=\(nameDat)\n"
}
// キー"price"の数値データを取り出して、msg変数に追加
if let price = data["price"] as? Int{
msg += "価格=\(price)\n"
}
}
}
}
self.textView.text = msg
} catch {
// JSONパースエラー
print("JSONパースエラー: \(error)")
}
} else {
// 通信エラー
print("通信エラー:",error)
}
}
task.resume()
}
}
JSON Data
{"data":
[
{"name":"ダージリン","price":600},
{"name":"アールグレイ","price":550}
]
}
★ StringからJSONを作成 → 解析する
import Foundation
let jsonText = "{\"address_components\": [{\"long_name\": \"フィンランド\",\"short_name\": \"FI\",\"types\": [\"country\",\"political\"]}]}"
if let jsonData = jsonText.data(using: .utf8) {
do {
let jsonDict = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! NSDictionary
let jsonArray = jsonDict["address_components"] as? NSArray
let dict = jsonArray?[0] as? NSDictionary
let country = dict?["short_name"] as? String
country
} catch {
}
}
import UIKit
class ViewController: UIViewController, NSXMLParserDelegate {
// UITextView
@IBOutlet weak var textView: UITextView!
var msg = ""
@IBAction func pushDwonload(sender: AnyObject) {
// URL
let url = NSURL(string: "http://editors.ascii.jp/c-minamoto/swift/swift-5-data.xml")!
let request = NSURLRequest(URL: url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config, delegate: nil, delegateQueue: NSOperationQueue.mainQueue())
let task = session.dataTaskWithRequest(request) { data, response, error in
// メインスレッドで実行される
if let _ = response, data = data {
// XMLの解析を開始
let parser = NSXMLParser(data: data)
parser.delegate = self
parser.parse()
} else {
// 通信エラー
print("通信エラー:",error)
}
}
task.resume()
}
// 1階層目のタグを覚えておく変数を用意
var XMLtag1: String! = ""
// タグの最初が見つかったら呼ばれる関数
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
// タグが「data」なら「dataタグ」に入ったことをXMLtag1に覚えておく
if elementName == "data" {
XMLtag1 = "data"
}
// タグが「tea」で、すでに「dataタグ」に入った状態なら、その中のデータを取り出す
if elementName == "tea" && XMLtag1 == "data" {
// 属性「name」の文字を取りだしてmsg変数に追加
if let teaName = attributeDict["name"] {
msg += "名前=\(teaName)\n"
}
// 属性「price」の文字を取りだしてmsg変数に追加
if let teaPrice = attributeDict["price"] {
msg += "価格=\(teaPrice)\n"
}
}
}
// end tag for a specific element
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
// タグが「data」なら タグが閉じられたので、XMLtag1をリセットして、メッセージを表示
if elementName == "data" {
XMLtag1 = ""
textView.text = msg
}
}
}
XML Data
<data>
<tea name="ダージリン" price="600"/>
<tea name="アールグレイ" price="550"/>
</data>