ฉันมีไฟล์ JSON ต้องการแยกวิเคราะห์และใช้รายการวัตถุในมุมมองตาราง คนใดคนหนึ่งสามารถแชร์รหัสเพื่อแยกวิเคราะห์ไฟล์ JSON ได้อย่างรวดเร็ว
ฉันมีไฟล์ JSON ต้องการแยกวิเคราะห์และใช้รายการวัตถุในมุมมองตาราง คนใดคนหนึ่งสามารถแชร์รหัสเพื่อแยกวิเคราะห์ไฟล์ JSON ได้อย่างรวดเร็ว
คำตอบ:
ไม่ง่ายไปกว่านี้:
import Foundation
let jsonData: Data = /* get your json data */
let jsonDict = try JSONSerialization.jsonObject(with: jsonData) as? NSDictionary
ดังที่กล่าวมาฉันขอแนะนำอย่างยิ่งให้ใช้Codable API ที่เปิดตัวใน Swift 4
let jsonData = NSData.dataWithContentsOfFile(filepath, options: .DataReadingMappedIfSafe, error: nil)
NSData(contentsOfFile: path)
น่าจะเป็น: ดูdeveloper.apple.com/library/ios/documentation/Cocoa/Reference/… :
การร้องขอ API
var request: NSURLRequest = NSURLRequest(URL: url)
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)
กำลังเตรียมการตอบสนอง
ประกาศอาร์เรย์ดังต่อไปนี้
var data: NSMutableData = NSMutableData()
ได้รับการตอบสนอง
1.
func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
// Received a new request, clear out the data object
self.data = NSMutableData()
}
2.
func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
// Append the received chunk of data to our data object
self.data.appendData(data)
}
3.
func connectionDidFinishLoading(connection: NSURLConnection!) {
// Request complete, self.data should now hold the resulting info
// Convert the retrieved data in to an object through JSON deserialization
var err: NSError
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
if jsonResult.count>0 && jsonResult["results"].count>0 {
var results: NSArray = jsonResult["results"] as NSArray
self.tableData = results
self.appsTableView.reloadData()
}
}
เมื่อNSURLConnection
ได้รับการตอบกลับเราสามารถคาดหวังว่าdidReceiveResponse
วิธีการนี้จะถูกเรียกใช้ในนามของเรา ณ จุดนี้เราเพียงแค่รีเซ็ตข้อมูลของเราโดยพูดว่าself.data = NSMutableData()
สร้างออบเจ็กต์ข้อมูลเปล่าใหม่
didReceiveData
หลังจากที่มีการเชื่อมต่อเราจะเริ่มได้รับข้อมูลในวิธีการ อาร์กิวเมนต์ข้อมูลที่ส่งมาที่นี่คือที่มาของข้อมูลที่น่าสนใจทั้งหมดของเรา เราจำเป็นต้องยึดแต่ละชิ้นที่เข้ามาดังนั้นเราจึงผนวกเข้ากับออบเจ็กต์ self.data ที่เราล้างออกไปก่อนหน้านี้
ในที่สุดเมื่อการเชื่อมต่อเสร็จสิ้นและได้รับข้อมูลทั้งหมดจะถูกconnectionDidFinishLoading
เรียกและเราพร้อมที่จะใช้ข้อมูลในแอปของเรา ไชโย!
connectionDidFinishLoading
วิธีการที่นี่ใช้NSJSONSerialization
ระดับการแปลงข้อมูลดิบของเราในการที่จะเป็นประโยชน์Dictionary
วัตถุโดย deserializing ผลที่ได้จาก URL ของคุณ
ฉันเพิ่งเขียนคลาสชื่อ JSON ซึ่งทำให้การจัดการ JSON ใน Swift ง่ายเหมือนกับออบเจ็กต์ JSON ใน ES5
เปลี่ยนวัตถุที่รวดเร็วของคุณเป็น JSON ดังนี้:
let obj:[String:AnyObject] = [
"array": [JSON.null, false, 0, "",[],[:]],
"object":[
"null": JSON.null,
"bool": true,
"int": 42,
"double": 3.141592653589793,
"string": "a α\t弾\n𪚲",
"array": [],
"object": [:]
],
"url":"http://blog.livedoor.com/dankogai/"
]
let json = JSON(obj)
json.toString()
... หรือสตริง ...
let json = JSON.parse("{\"array\":[...}")
... หรือ URL
let json = JSON.fromURL("http://api.dan.co.jp/jsonenv")
Tree Traversal
เพียงสำรวจองค์ประกอบผ่านตัวห้อย:
json["object"]["null"].asNull // NSNull()
// ...
json["object"]["string"].asString // "a α\t弾\n𪚲"
json["array"][0].asNull // NSNull()
json["array"][1].asBool // false
// ...
เช่นเดียวกับSwiftyJSONคุณไม่ต้องกังวลหากไม่มีรายการที่ห้อยลงมา
if let b = json["noexistent"][1234567890]["entry"].asBool {
// ....
} else {
let e = json["noexistent"][1234567890]["entry"].asError
println(e)
}
หากคุณเบื่อกับตัวห้อยให้เพิ่มโครงร่างของคุณดังนี้:
//// schema by subclassing
class MyJSON : JSON {
init(_ obj:AnyObject){ super.init(obj) }
init(_ json:JSON) { super.init(json) }
var null :NSNull? { return self["null"].asNull }
var bool :Bool? { return self["bool"].asBool }
var int :Int? { return self["int"].asInt }
var double:Double? { return self["double"].asDouble }
var string:String? { return self["string"].asString }
}
และคุณไป:
let myjson = MyJSON(obj)
myjson.object.null
myjson.object.bool
myjson.object.int
myjson.object.double
myjson.object.string
// ...
หวังว่าคุณจะชอบมัน.
ด้วย xCode 7.3+ ใหม่สิ่งสำคัญในการเพิ่มโดเมนของคุณในรายการข้อยกเว้น ( ฉันจะเพิ่ม NSAppTransportSecurity ลงในไฟล์ info.plist ของฉันได้อย่างไร ) โปรดดูคำแนะนำในการโพสต์นี้มิฉะนั้นคุณจะได้รับข้อผิดพลาดในการขนส่ง
นี่คือรหัสสำหรับทำการแปลงระหว่าง JSON และ NSData ใน Swift 2.0
// Convert from NSData to json object
func nsdataToJSON(data: NSData) -> AnyObject? {
do {
return try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers)
} catch let myJSONError {
print(myJSONError)
}
return nil
}
// Convert from JSON to nsdata
func jsonToNSData(json: AnyObject) -> NSData?{
do {
return try NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted)
} catch let myJSONError {
print(myJSONError)
}
return nil;
}
ในสวิฟท์ 4 + ขอแนะนำให้ใช้แทนCodable
JSONSerialization
ซึ่งCodable
รวมถึงสองโปรโตคอล: Decodable
และEncodable
. Decodable
โปรโตคอลนี้ช่วยให้คุณสามารถถอดรหัสData
ในรูปแบบ JSON เพื่อกำหนดโครงสร้าง / คลาสที่กำหนดเองตามโปรโตคอลนี้
ตัวอย่างเช่นลองนึกภาพสถานการณ์ว่าเรามีสิ่งนี้ง่ายๆData
(อาร์เรย์ของวัตถุสองชิ้น)
let data = Data("""
[
{"name":"Steve","age":56},
{"name":"iPhone","age":11}
]
""".utf8)
จากนั้นให้ติดตามstruct
และใช้โปรโตคอลDecodable
struct Person: Decodable {
let name: String
let age: Int
}
ตอนนี้คุณสามารถถอดรหัสของคุณData
ไปยังอาร์เรย์ของคุณPerson
โดยใช้โดยJSONDecoder
ที่พารามิเตอร์แรกเป็นประเภทที่สอดคล้องกับDecodable
และควรData
ถอดรหัสประเภทนี้
do {
let people = try JSONDecoder().decode([Person].self, from: data)
} catch { print(error) }
... โปรดทราบว่าการถอดรหัสจะต้องทำเครื่องหมายด้วยtry
คีย์เวิร์ดเนื่องจากคุณอาจทำผิดพลาดในการตั้งชื่อแล้วโมเดลของคุณจะไม่สามารถถอดรหัสได้อย่างถูกต้อง ... ดังนั้นคุณควรใส่ไว้ในบล็อก do-try-catch
กรณีที่คีย์ใน json แตกต่างจากชื่อคุณสมบัติ:
หากตั้งชื่อคีย์โดยใช้ snake_case คุณสามารถตั้งค่าตัวถอดรหัสที่keyDecodingStrategy
จะconvertFromSnakeCase
เปลี่ยนคีย์จากproperty_name
เป็น camelCase ได้propertyName
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let people = try decoder.decode([Person].self, from: data)
หากคุณต้องการชื่อเฉพาะคุณสามารถใช้คีย์การเข้ารหัสภายในโครงสร้าง / คลาสที่คุณประกาศชื่อคีย์
let data = Data("""
{ "userName":"Codable", "age": 1 }
""".utf8)
struct Person: Decodable {
let name: String
let age: Int
enum CodingKeys: String, CodingKey {
case name = "userName"
case age
}
}
ฉันยังเขียนไลบรารีขนาดเล็กซึ่งมีความเชี่ยวชาญในการทำแผนที่การตอบสนอง json ลงในโครงสร้างวัตถุ ฉันใช้ห้องสมุด json-swift จาก David Owens เป็นการภายใน บางทีมันอาจจะมีประโยชน์สำหรับคนอื่น
https://github.com/prine/ROJSONParser
ตัวอย่างพนักงาน json
{
"employees": [
{
"firstName": "John",
"lastName": "Doe",
"age": 26
},
{
"firstName": "Anna",
"lastName": "Smith",
"age": 30
},
{
"firstName": "Peter",
"lastName": "Jones",
"age": 45
}]
}
ขั้นตอนต่อไปคุณต้องสร้างแบบจำลองข้อมูลของคุณ (EmplyoeeContainer และ Employee)
พนักงานสวิฟท์
class Employee : ROJSONObject {
required init() {
super.init();
}
required init(jsonData:AnyObject) {
super.init(jsonData: jsonData)
}
var firstname:String {
return Value<String>.get(self, key: "firstName")
}
var lastname:String {
return Value<String>.get(self, key: "lastName")
}
var age:Int {
return Value<Int>.get(self, key: "age")
}
}
EmployeeContainer.swift
class EmployeeContainer : ROJSONObject {
required init() {
super.init();
}
required init(jsonData:AnyObject) {
super.init(jsonData: jsonData)
}
lazy var employees:[Employee] = {
return Value<[Employee]>.getArray(self, key: "employees") as [Employee]
}()
}
จากนั้นในการแมปวัตถุจากการตอบสนอง JSON คุณจะต้องส่งข้อมูลไปยังคลาส EmployeeContainer เป็นพารามิเตอร์ในตัวสร้าง สร้างแบบจำลองข้อมูลของคุณโดยอัตโนมัติ
var baseWebservice:BaseWebservice = BaseWebservice();
var urlToJSON = "http://prine.ch/employees.json"
var callbackJSON = {(status:Int, employeeContainer:EmployeeContainer) -> () in
for employee in employeeContainer.employees {
println("Firstname: \(employee.firstname) Lastname: \(employee.lastname) age: \(employee.age)")
}
}
baseWebservice.get(urlToJSON, callback:callbackJSON)
ผลลัพธ์ของคอนโซลจะมีลักษณะดังต่อไปนี้:
Firstname: John Lastname: Doe age: 26
Firstname: Anna Lastname: Smith age: 30
Firstname: Peter Lastname: Jones age: 45
ตายง่ายและอ่านง่าย!
"mrap"
จากnicknames
เป็นสตริงจากการตอบสนอง JSON นี้{
"other": {
"nicknames": ["mrap", "Mikee"]
}
ใช้ข้อมูล json ของคุณNSData
เหมือนเดิมไม่จำเป็นต้องประมวลผลล่วงหน้า
let parser = JSONParser(jsonData)
if let handle = parser.getString("other.nicknames[0]") {
// that's it!
}
ข้อจำกัดความรับผิดชอบ: ฉันทำสิ่งนี้และหวังว่ามันจะช่วยทุกคนได้ อย่าลังเลที่จะปรับปรุง!
การแยกวิเคราะห์ JSON ใน Swift เป็นงานที่ยอดเยี่ยมสำหรับการสร้างโค้ด ฉันได้สร้างเครื่องมือที่http://www.guideluxe.com/JsonToSwiftเพื่อทำสิ่งนั้น
คุณจัดหาออบเจ็กต์ JSON ตัวอย่างพร้อมชื่อคลาสและเครื่องมือจะสร้างคลาส Swift ที่สอดคล้องกันรวมถึงคลาส Swift ในเครือที่จำเป็นเพื่อแสดงโครงสร้างโดยนัยโดย JSON ตัวอย่าง นอกจากนี้ยังรวมถึงวิธีการคลาสที่ใช้ในการเติมข้อมูลวัตถุ Swift รวมถึงวิธีที่ใช้วิธี NSJSONSerialization.JSONObjectWithData การแมปที่จำเป็นจากอ็อบเจ็กต์ NSArray และ NSDictionary มีให้
จากโค้ดที่สร้างขึ้นคุณจะต้องจัดหาอ็อบเจ็กต์ NSData ที่มี JSON ที่ตรงกับตัวอย่างที่ให้มากับเครื่องมือ
นอกเหนือจากมูลนิธิแล้วไม่มีการพึ่งพา
งานของฉันได้รับแรงบันดาลใจจากhttp://json2csharp.com/ซึ่งมีประโยชน์มากสำหรับโครงการ. NET
วิธีสร้างออบเจ็กต์ NSData จากไฟล์ JSON มีดังนี้
let fileUrl: NSURL = NSBundle.mainBundle().URLForResource("JsonFile", withExtension: "json")!
let jsonData: NSData = NSData(contentsOfURL: fileUrl)!
หมายเหตุ: หากคุณกำลังมองหานี้ยังมีโอกาสสูงที่คุณไม่ทราบวิธีการติดตั้ง swifty
ทำตามคำแนะนำที่นี่
sudo gem install cocoapods
cd ~/Path/To/Folder/Containing/ShowTracker
ถัดไปป้อนคำสั่งนี้:
pod init
สิ่งนี้จะสร้างค่าเริ่มต้นPodfile
สำหรับโครงการของคุณ Podfile
เป็นที่ที่คุณกำหนดอ้างอิงโครงการของคุณอาศัย
พิมพ์คำสั่งนี้เพื่อเปิดPodfile
โดยใช้Xcode
สำหรับแก้ไข:
open -a Xcode Podfile
เพิ่มSwifty
ลงใน podfile
platform :ios, '8.0'
use_frameworks!
target 'MyApp' do
pod 'SwiftyJSON', '~> X.X.X'
end
var mURL = NSURL(string: "http://api.openweathermap.org/data/2.5/weather?q=London,uk&units=metric")
if mURL == nil{
println("You are stupid")
return
}
var request = NSURLRequest(URL: mURL!)
NSURLConnection.sendAsynchronousRequest(
request,
queue: NSOperationQueue.mainQueue(),
completionHandler:{ (
response: NSURLResponse!,
data: NSData!,
error: NSError!) -> Void in
if data != nil {
var mJSON = JSON(data: data!)
if let current_conditions = mJSON["weather"][0]["description"].string {
println("Current conditions: " + current_conditions)
} else {
println("MORON!")
}
if let current_temperature = mJSON["main"]["temp"].double {
println("Temperature: "+ String(format:"%.f", current_temperature) + "°C"
} else {
println("MORON!")
}
}
})
viewcontroller ทั้งหมดซึ่งแสดงข้อมูลในมุมมอง collcction โดยใช้ json parsig สองวิธี
@IBOutlet weak var imagecollectionview: UICollectionView!
lazy var data = NSMutableData()
var dictdata : NSMutableDictionary = NSMutableDictionary()
override func viewDidLoad() {
super.viewDidLoad()
startConnection()
startNewConnection()
// Do any additional setup after loading the view, typically from a nib.
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return dictdata.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CustomcellCollectionViewCell", forIndexPath: indexPath) as! CustomcellCollectionViewCell
cell.name.text = dictdata.valueForKey("Data")?.valueForKey("location") as? String
let url = NSURL(string: (dictdata.valueForKey("Data")?.valueForKey("avatar_url") as? String)! )
LazyImage.showForImageView(cell.image, url:"URL
return cell
}
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let kWhateverHeightYouWant = 100
return CGSizeMake(self.view.bounds.size.width/2, CGFloat(kWhateverHeightYouWant))
}
func startNewConnection()
{
let url: URL = URL(string: "YOUR URL" as String)!
let session = URLSession.shared
let request = NSMutableURLRequest(url: url as URL)
request.httpMethod = "GET" //set the get or post according to your request
// request.cachePolicy = NSURLRequest.CachePolicy.ReloadIgnoringCacheData
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
let task = session.dataTask(with: request as URLRequest) {
( data, response, error) in
guard let _:NSData = data as NSData?, let _:URLResponse = response, error == nil else {
print("error")
return
}
let jsonString = NSString(data: data!, encoding:String.Encoding.utf8.rawValue) as! String
}
task.resume()
}
func startConnection(){
let urlPath: String = "your URL"
let url: NSURL = NSURL(string: urlPath)!
var request: NSURLRequest = NSURLRequest(URL: url)
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection.start()
}
func connection(connection: NSURLConnection!, didReceiveData data: NSData!){
self.data.appendData(data)
}
func buttonAction(sender: UIButton!){
startConnection()
}
func connectionDidFinishLoading(connection: NSURLConnection!) {
do {
let JSON = try NSJSONSerialization.JSONObjectWithData(self.data, options:NSJSONReadingOptions(rawValue: 0))
guard let JSONDictionary :NSDictionary = JSON as? NSDictionary else {
print("Not a Dictionary")
// put in function
return
}
print("JSONDictionary! \(JSONDictionary)")
dictdata.setObject(JSONDictionary, forKey: "Data")
imagecollectionview.reloadData()
}
catch let JSONError as NSError {
print("\(JSONError)")
} }
if let path = Bundle(for: BPPView.self).path(forResource: jsonFileName, ofType: "json") {
do {
let data = try Data(contentsOf: URL(fileURLWithPath: path), options: NSData.ReadingOptions.mappedIfSafe)
let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
self.levels = Mapper<Level>().mapArray(JSONArray: (json as! [[String : Any]]))!
print(levels.count)
} catch let error as NSError {
print(error.localizedDescription)
}
} else {
print("Invalid filename/path.")
}
ก่อนที่คุณจะต้องเตรียมชุดของที่เหมาะสม: วัตถุที่แมปได้เพื่อแยกวิเคราะห์
import UIKit
import ObjectMapper
class Level: Mappable {
var levelName = ""
var levelItems = [LevelItem]()
required init?(map: Map) {
}
// Mappable
func mapping(map: Map) {
levelName <- map["levelName"]
levelItems <- map["levelItems"]
}
import UIKit
import ObjectMapper
class LevelItem: Mappable {
var frontBackSide = BPPFrontBack.Undefined
var fullImageName = ""
var fullImageSelectedName = ""
var bodyParts = [BodyPart]()
required init?(map: Map) {
}
// Mappable
func mapping(map: Map) {
frontBackSide <- map["frontBackSide"]
fullImageName <- map["fullImageName"]
fullImageSelectedName <- map["fullImageSelectedName"]
bodyParts <- map["bodyParts"]
}}
สวิฟต์ 3
let parsedResult: [String: AnyObject]
do {
parsedResult = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String:AnyObject]
} catch {
// Display an error or return or whatever
}
ข้อมูล - เป็นประเภทข้อมูล (โครงสร้าง) (เช่นส่งคืนโดยการตอบสนองของเซิร์ฟเวอร์บางส่วน)
โปรแกรมแยกวิเคราะห์นี้ใช้ generics ในการแคสต์ประเภท JSON เป็น Swift ซึ่งจะลดโค้ดที่คุณต้องพิมพ์
https://github.com/evgenyneu/JsonSwiftson
struct Person {
let name: String?
let age: Int?
}
let mapper = JsonSwiftson(json: "{ \"name\": \"Peter\", \"age\": 41 }")
let person: Person? = Person(
name: mapper["name"].map(),
age: mapper["age"].map()
)
ด้านล่างนี้คือตัวอย่าง Swift Playground:
import UIKit
let jsonString = "{\"name\": \"John Doe\", \"phone\":123456}"
let data = jsonString.data(using: .utf8)
var jsonObject: Any
do {
jsonObject = try JSONSerialization.jsonObject(with: data!) as Any
if let obj = jsonObject as? NSDictionary {
print(obj["name"])
}
} catch {
print("error")
}
สวิฟต์ 4
สร้างโครงการ
ออกแบบ StoryBoard ด้วยปุ่มและ UITableview
สร้าง TableViewCell VC
ในการดำเนินการปุ่มแทรกรหัสโฟลโลอิ้ง
จำรหัสนี้เพื่อดึงข้อมูลอาร์เรย์ของข้อมูลใน Api
import UIKit
class ViewController3: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet var tableView: UITableView!
var displayDatasssss = [displyDataClass]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return displayDatasssss.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell1") as! TableViewCell1
cell.label1.text = displayDatasssss[indexPath.row].email
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func gettt(_ sender: Any) {
let url = "http://jsonplaceholder.typicode.com/users"
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "GET"
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main)
let task = session.dataTask(with: request){(data, response,error)in
if (error != nil){
print("Error")
}
else{
do{
// Array of Data
let fetchData = try JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as! NSArray
for eachData in fetchData {
let eachdataitem = eachData as! [String : Any]
let name = eachdataitem["name"]as! String
let username = eachdataitem["username"]as! String
let email = eachdataitem["email"]as! String
self.displayDatasssss.append(displyDataClass(name: name, username: username,email : email))
}
self.tableView.reloadData()
}
catch{
print("Error 2")
}
}
}
task.resume()
}
}
class displyDataClass {
var name : String
var username : String
var email : String
init(name : String,username : String,email :String) {
self.name = name
self.username = username
self.email = email
}
}
สำหรับการดึงข้อมูลพจนานุกรม
import UIKit
class ViewController3: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet var tableView: UITableView!
var displayDatasssss = [displyDataClass]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return displayDatasssss.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell1") as! TableViewCell1
cell.label1.text = displayDatasssss[indexPath.row].email
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func gettt(_ sender: Any) {
let url = "http://jsonplaceholder.typicode.com/users/1"
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "GET"
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main)
let task = session.dataTask(with: request){(data, response,error)in
if (error != nil){
print("Error")
}
else{
do{
//Dictionary data Fetching
let fetchData = try JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as! [String: AnyObject]
let name = fetchData["name"]as! String
let username = fetchData["username"]as! String
let email = fetchData["email"]as! String
self.displayDatasssss.append(displyDataClass(name: name, username: username,email : email))
self.tableView.reloadData()
}
catch{
print("Error 2")
}
}
}
task.resume()
}
}
class displyDataClass {
var name : String
var username : String
var email : String
init(name : String,username : String,email :String) {
self.name = name
self.username = username
self.email = email
}
}
ใช้ประโยชน์จาก JSONDecoder().decode
ดูวิดีโอนี้ในการแยกวิเคราะห์ JSON ด้วย Swift 4
struct Post: Codable {
let userId: Int
let id: Int
let title: String
let body: String
}
URLSession.shared.dataTask(with: URL(string: "https://jsonplaceholder.typicode.com/posts")!) { (data, response, error) in
guard let response = response as? HTTPURLResponse else {
print("HTTPURLResponse error")
return
}
guard 200 ... 299 ~= response.statusCode else {
print("Status Code error \(response.statusCode)")
return
}
guard let data = data else {
print("No Data")
return
}
let posts = try! JSONDecoder().decode([Post].self, from: data)
print(posts)
}.resume()
Swift 2 iOS 9
let miadata = NSData(contentsOfURL: NSURL(string: "https://myWeb....php")!)
do{
let MyData = try NSJSONSerialization.JSONObjectWithData(miadata!, options: NSJSONReadingOptions.MutableContainers) as? NSArray
print(".........\(MyData)")
}
catch let error as NSError{
// error.description
print(error.description)
}