Как разобрать файл JSON в swift?

У меня есть файл JSON, хочу проанализировать и использовать список объектов в табличном представлении. Может ли кто-нибудь поделиться кодом для разбора файла JSON в swift.

18 ответов

Решение

Не может быть проще:

import Foundation

var error: NSError?
let jsonData: NSData = /* get your json data */

let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary

Создание запроса 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 путем десериализации результатов из вашего 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?), Обратитесь к этой публикации для получения инструкций, в противном случае вы получите ошибку транспортного органа.

Кодируемый

В Swift 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 верблюжьей 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 и 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;
}

Шаг 1. Установите Swifty Json https://github.com/SwiftyJSON/SwiftyJSON

Примечание: если вы ищете это, есть большой шанс, что вы не знаете, как установить swifty. Следуйте инструкциям на https://guides.cocoapods.org/using/getting-started.html

sudo gem установить cocoapods

CD ~ / Путь / К / Папка / Содержит /ShowTracker

Далее введите эту команду:

pod init

Это создаст Podfile по умолчанию для вашего проекта. Podfile - это место, где вы определяете зависимости, на которые опирается ваш проект.

Введите эту команду, чтобы открыть Podfile, используя Xcode для редактирования:

открыть -a Xcode Podfile

Добавьте Swifty в подфайл

platform :ios, '8.0'
use_frameworks!

target 'MyApp' do
    pod 'SwiftyJSON', '~> X.X.X'
end

Шаг 2. Проверьте этот пример

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!")
                        }

                    }
                })

Шаг 3. Прибыль

Я также написал небольшую библиотеку, которая специализируется на отображении ответа json в структуру объекта. Я внутренне использую библиотеку json-swift от Дэвида Оуэнса. Может быть, это полезно для кого-то еще.

https://github.com/prine/ROJSONParser

Пример Employees.json

{
"employees": [
  {
    "firstName": "John",
    "lastName": "Doe",
    "age": 26
  },
  {
    "firstName": "Anna",
    "lastName": "Smith",
    "age": 30
  },
  {
    "firstName": "Peter",
    "lastName": "Jones",
    "age": 45
  }]
}

В качестве следующего шага вы должны создать свою модель данных (EmplyoeeContainer и Employee).

Employee.swift

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

SwiftJSONParse: разбирать JSON как задира

Смертельно-просто и легко читается!

Пример: получить значение "mrap" от nicknames как строка из этого ответа JSON

{
    "other": {
        "nicknames": ["mrap", "Mikee"]
}

Он принимает ваши данные JSON NSData как есть, нет необходимости в предварительной обработке.

let parser = JSONParser(jsonData)

if let handle = parser.getString("other.nicknames[0]") {
    // that's it!
}

Отказ от ответственности: я сделал это, и я надеюсь, что это поможет всем. Не стесняйтесь улучшать это!

Свифт 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
}

данные - это тип данных (структура) (то есть возвращается по какому-либо ответу сервера)

Разбор JSON в Swift - отличная работа для генерации кода. Я создал инструмент на http://www.guideluxe.com/JsonToSwift чтобы сделать это.

Вы предоставляете образец JSON-объекта с именем класса, и инструмент генерирует соответствующий класс Swift, а также любые необходимые вспомогательные классы Swift, чтобы представить структуру, подразумеваемую образцом JSON. Также включены методы класса, используемые для заполнения объектов Swift, включая метод, который использует метод NSJSONSerialization.JSONObjectWithData. Необходимые отображения из объектов NSArray и NSDictionary предоставляются.

Из сгенерированного кода вам нужно только предоставить объект NSData, содержащий JSON, который соответствует образцу, предоставленному инструменту.

Кроме Foundation, нет никаких зависимостей.

Моя работа была вдохновлена http://json2csharp.com/, которая очень удобна для проектов.NET.

Вот как можно создать объект NSData из файла JSON.

let fileUrl: NSURL = NSBundle.mainBundle().URLForResource("JsonFile", withExtension: "json")!
let jsonData: NSData = NSData(contentsOfURL: fileUrl)!

Весь viewcontroller, который показывает данные в виде коллекции, используя два метода 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)")
    }    }

Использование инфраструктуры ObjectMapper

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"]
}}

Пример запроса API Swift 4

Использовать 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()

Swift2 iOs9

   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)
    }

Swift 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
    }
}

Ниже приведен пример 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")
}

Этот синтаксический анализатор использует дженерики для приведения типов 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 5+ и Xcode 13 Рабочий пример

JSON-ответ

      [
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
  },
]

Класс модели

      struct PostsModel : Decodable {
    let userId : Int?
    let id : Int?
    let title : String?
    let body : String?
}

Получить ответ

      let url = URL(string: K.GET_POSTS)!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let safeData = data,
                let response = response as? HTTPURLResponse,
                error == nil else {                                              // check for fundamental networking error
                print("error", error ?? "Unknown error")
                delegate?.onError(error!)
                return
            }

            guard (200 ... 299) ~= response.statusCode else {                    // check for http errors
                print("statusCode should be 2xx, but is \(response.statusCode)")
                print("response = \(response)")
                return
            }

            let responseString = String(data: safeData, encoding: .utf8)
            do {
                let decoder = JSONDecoder()
            let loginResponseModel =  try decoder.decode([PostsModel].self, from: data!)

            }
            catch {
                print(error)
            }
            print("responseString = \(responseString)")
        }

        task.resume()
Другие вопросы по тегам