JSON स्ट्रिंग को ऑब्जेक्ट में स्विफ्ट में बदलने का सरल और साफ तरीका


82

मैं स्विफ्ट में ऑब्जेक्ट के लिए एक काफी सरल JSON स्ट्रिंग बदलने के लिए दिनों की खोज कर रहा हूं लेकिन कोई फायदा नहीं हुआ।

यहाँ वेब सेवा कॉल के लिए कोड है:

func GetAllBusiness() {

        Alamofire.request(.GET, "http://MyWebService/").responseString { (request, response, string, error) in

                println(string)

        }
}

मेरे पास एक स्विफ्ट स्ट्रक्चर है Business.swift:

struct Business {
    var Id : Int = 0
    var Name = ""
    var Latitude = ""
    var Longitude = ""
    var Address = ""
}

यहाँ मेरी परीक्षण सेवा तैनात है:

[
  {
    "Id": 1,
    "Name": "A",
    "Latitude": "-35.243256",
    "Longitude": "149.110701",
    "Address": null
  },
  {
    "Id": 2,
    "Name": "B",
    "Latitude": "-35.240592",
    "Longitude": "149.104843",
    "Address": null
  }
  ...
]

यह सुखद होगा यदि कोई मुझे इसके माध्यम से मार्गदर्शन करे।

धन्यवाद।

जवाबों:


56

यहाँ कुछ सुझाव दिए गए हैं कि कैसे सरल उदाहरण के साथ शुरू किया जाए।

विचार करें कि आपके पास JSON Array String (आपके समान) है जैसे:

 var list:Array<Business> = []

  // left only 2 fields for demo
  struct Business {
    var id : Int = 0
    var name = ""               
 }

 var jsonStringAsArray = "[\n" +
        "{\n" +
        "\"id\":72,\n" +
        "\"name\":\"Batata Cremosa\",\n" +            
        "},\n" +
        "{\n" +
        "\"id\":183,\n" +
        "\"name\":\"Caldeirada de Peixes\",\n" +            
        "},\n" +
        "{\n" +
        "\"id\":76,\n" +
        "\"name\":\"Batata com Cebola e Ervas\",\n" +            
        "},\n" +
        "{\n" +
        "\"id\":56,\n" +
        "\"name\":\"Arroz de forma\",\n" +            
    "}]"


        // convert String to NSData
        var data: NSData = jsonStringAsArray.dataUsingEncoding(NSUTF8StringEncoding)!
        var error: NSError?

        // convert NSData to 'AnyObject'
        let anyObj: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0),
            error: &error)
        println("Error: \(error)")

     // convert 'AnyObject' to Array<Business>
     list = self.parseJson(anyObj!)

     //===============

    func parseJson(anyObj:AnyObject) -> Array<Business>{

        var list:Array<Business> = []

         if  anyObj is Array<AnyObject> {

            var b:Business = Business()

            for json in anyObj as Array<AnyObject>{
             b.name = (json["name"] as AnyObject? as? String) ?? "" // to get rid of null
             b.id  =  (json["id"]  as AnyObject? as? Int) ?? 0                 

               list.append(b)
            }// for

        } // if

      return list

    }//func    

[संपादित करें]

शून्य से छुटकारा पाने के लिए निम्न में बदल गया:

b.name = (json["name"] as AnyObject? as? String) ?? ""
b.id  =  (json["id"]  as AnyObject? as? Int) ?? 0 

संदर्भ भी देखें Coalescing Operator(उर्फ ??)

आशा है कि यह आपको चीजों को सुलझाने में मदद करेगा,


बहुत बढ़िया! एक जादू की तरह काम किया। धन्यवाद! सिर्फ एक छोटी सी बात, यह एक त्रुटि दे रहा है अगर JSON में तत्व शून्य है। जैसे: b.name = json ["name"] AnyObject के रूप में! स्ट्रिंग के रूप में यदि नाम अशक्त है, तो मैं इसे अशक्त बनाने के लिए शर्त कैसे जोड़ सकता हूं?
हसन निजामानी

स्ट्रिंग करने से पहले AnyObject को कास्ट करने की क्या आवश्यकता है?
बटेरमोस

@ बटेरमोस कुछ नहीं। आप AnyObjectकुंजी द्वारा वैकल्पिक हो बस स्ट्रिंग को डाउनकास्ट करने से पहले सुनिश्चित करें कि यह नहीं है nil। मैं आप कर सकते हैं का उपयोग करके incapsualte है कि कारण के लिए !या मेरे मामले में ?holdplace साथ??
मैक्सिम Shoustin

मुझे लगता है, यदि आप ऑब्जेक्ट var b:Business = Business()लूप बनाते हैं , तो यह प्रत्येक सूची तत्व में समान डेटा दिखा सकता है।
पैट्रिक्स

50

स्विफ्ट 3/4 के लिए

extension String {
    func toJSON() -> Any? {
        guard let data = self.data(using: .utf8, allowLossyConversion: false) else { return nil }
        return try? JSONSerialization.jsonObject(with: data, options: .mutableContainers)
    }
}

उदाहरण उपयोग:

 let dict = myString.toJSON() as? [String:AnyObject] // can be any type here

2
भविष्य के फुटनोट: इसके बजाय do-catch, try?यहां उपयोग किया जा सकता है, जो शून्य को वापस करने के समान परिणाम देगा catch
ओखान ओक्बे

... और इस रूपांतरण के बाद एक पैरामीटर को कैसे एक्सेस करता है?
स्टारवेट

किसी और के लिए रुचि रखते हैं: jsonObjectAsNSDictionary = responseString? .ToJSON () के रूप में जाने दें! [स्ट्रिंग: AnyObject] प्रिंट (jsonObjectAsNS सहकर्मी ["अनुमतियाँ"]! ["Canaddeditowncomment"])
Starwave

1
कृपया शीघ्रता से सही वाक्यविन्यास करें ... extension String { func toJSON() -> Any? { guard let data = self.data(using: .utf8, allowLossyConversion: false) else { return nil } return try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) } }
यासिर अली

27

जैसा कि साधारण स्ट्रिंग एक्सटेंशन को पर्याप्त होना चाहिए:

extension String {

    var parseJSONString: AnyObject? {

        let data = self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

        if let jsonData = data {
            // Will return an object or nil if JSON decoding fails
            return NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil)
        } else {
            // Lossless conversion of the string was not possible
            return nil
        }
    }
}

फिर:

var jsonString = "[\n" +
    "{\n" +
    "\"id\":72,\n" +
    "\"name\":\"Batata Cremosa\",\n" +            
    "},\n" +
    "{\n" +
    "\"id\":183,\n" +
    "\"name\":\"Caldeirada de Peixes\",\n" +            
    "},\n" +
    "{\n" +
    "\"id\":76,\n" +
    "\"name\":\"Batata com Cebola e Ervas\",\n" +            
    "},\n" +
    "{\n" +
    "\"id\":56,\n" +
    "\"name\":\"Arroz de forma\",\n" +            
"}]"

let json: AnyObject? = jsonString.parseJSONString
println("Parsed JSON: \(json!)")
println("json[3]: \(json![3])")

/* Output:

Parsed JSON: (
    {
    id = 72;
    name = "Batata Cremosa";
    },
    {
    id = 183;
    name = "Caldeirada de Peixes";
    },
    {
    id = 76;
    name = "Batata com Cebola e Ervas";
    },
    {
    id = 56;
    name = "Arroz de forma";
    }
)

json[3]: {
    id = 56;
    name = "Arroz de forma";
}
*/

15

स्विफ्ट 4 पार्स JSON बहुत अधिक सुरुचिपूर्ण ढंग से। इस सरलीकृत उदाहरण के अनुसार अपनी संरचना के लिए कोडेबल प्रोटोकॉल अपनाएं:

struct Business: Codable {
    let id: Int
    let name: String
}

JSON सरणी को पार्स करने के लिए, आप डिकोडर को बताते हैं कि डेटा सरणी की वस्तुएं क्या हैं

let parsedData = decoder.decode([Business].self, from: data)

यहाँ एक पूर्ण कार्य उदाहरण है:

import Foundation

struct Business: Codable {
    let id: Int
    let name: String
}

// Generating the example JSON data: 
let originalObjects = [Business(id: 0, name: "A"), Business(id: 1, name: "B")]
let encoder = JSONEncoder()
let data = try! encoder.encode(originalObjects)

// Parsing the data: 
let decoder = JSONDecoder()
let parsedData = try! decoder.decode([Business].self, from: data)

अधिक पृष्ठभूमि के लिए, इस उत्कृष्ट मार्गदर्शिका को देखें


इसके लिए नकारात्मक पक्ष यह है कि किसी को संरचना का ट्रैक रखना होगा, और यदि आपके पास ~ 30 या अधिक पैरामीटर हैं, तो प्रबंधन एक बड़ी परेशानी बन जाएगा।
स्टारवेट

@Starwave: सुनिश्चित नहीं है कि यह आपकी चिंता को संबोधित करता है, लेकिन ध्यान दें कि आपको केवल उन फ़ील्ड्स को शामिल करने की आवश्यकता है जिन्हें आप उस डेटा के बारे में परवाह करते हैं जिसका उपयोग आप डेटा को डीकोड करने के लिए करते हैं। उदाहरण के लिए, यदि JSON फॉर्म [{"id": 1, "नाम:" A "," स्थान ":" वारसॉ "} का था,] तब भी आप इसे उसी व्यवसाय संरचना का उपयोग करके डिकोड कर सकते हैं। स्थान फ़ील्ड बस होगा। नजरअंदाज कर दिया।
Noyer282

खूनी नरक, मैंने ऐसा नहीं सोचा था ... लेकिन फिर, यहाँ पार्सडाटा क्या है? NSDictionary?
स्टारवेट

@Starwave: यह मूल प्रश्न की तरह ही एक सरणी है।
Noyer282

9

के लिए स्विफ्ट 4

मैंने @ Passkit के तर्क का उपयोग किया लेकिन मुझे स्विफ्ट 4 के अनुसार अपडेट करना पड़ा


चरण 1 स्ट्रिंग क्लास के लिए एक्सटेंशन बनाया गया

import UIKit


extension String
    {
        var parseJSONString: AnyObject?
        {
            let data = self.data(using: String.Encoding.utf8, allowLossyConversion: false)

            if let jsonData = data
            {
                // Will return an object or nil if JSON decoding fails
                do
                {
                    let message = try JSONSerialization.jsonObject(with: jsonData, options:.mutableContainers)
                    if let jsonResult = message as? NSMutableArray
                    {
                        print(jsonResult)

                        return jsonResult //Will return the json array output
                    }
                    else
                    {
                        return nil
                    }
                }
                catch let error as NSError
                {
                    print("An error occurred: \(error)")
                    return nil
                }
            }
            else
            {
                // Lossless conversion of the string was not possible
                return nil
            }
        }
    }

Step.2 यह है कि मैं अपने दृश्य नियंत्रक में कैसे इस्तेमाल किया है

var jsonString = "[\n" +
    "{\n" +
    "\"id\":72,\n" +
    "\"name\":\"Batata Cremosa\",\n" +            
    "},\n" +
    "{\n" +
    "\"id\":183,\n" +
    "\"name\":\"Caldeirada de Peixes\",\n" +            
    "},\n" +
    "{\n" +
    "\"id\":76,\n" +
    "\"name\":\"Batata com Cebola e Ervas\",\n" +            
    "},\n" +
    "{\n" +
    "\"id\":56,\n" +
    "\"name\":\"Arroz de forma\",\n" +            
"}]"

 //Convert jsonString to jsonArray

let json: AnyObject? = jsonString.parseJSONString
print("Parsed JSON: \(json!)")
print("json[2]: \(json![2])")

सारा श्रेय मूल उपयोगकर्ता को जाता है, मैंने अभी नवीनतम स्विफ्ट संस्करण के लिए अपडेट किया है


7

मैंने एक लाइब्रेरी लिखी, जो कि json डेटा के साथ काम करती है और स्विफ्ट को डिसरिसेलाइज करने वाली हवा है। आप इसे यहाँ प्राप्त कर सकते हैं: https://github.com/isair/JSONHelper

संपादित करें: मैंने अपनी लाइब्रेरी को अपडेट किया है, अब आप इसे केवल इस के साथ कर सकते हैं:

class Business: Deserializable {
    var id: Int?
    var name = "N/A"  // This one has a default value.

    required init(data: [String: AnyObject]) {
        id <-- data["id"]
        name <-- data["name"]
    }
}

var businesses: [Business]()

Alamofire.request(.GET, "http://MyWebService/").responseString { (request, response, string, error) in
    businesses <-- string
}

पुराना उत्तर:

पहले .responseString का उपयोग करने के बजाय, प्रतिक्रिया ऑब्जेक्ट प्राप्त करने के लिए .response का उपयोग करें। फिर अपना कोड बदलें:

func getAllBusinesses() {

    Alamofire.request(.GET, "http://MyWebService/").response { (request, response, data, error) in
        var businesses: [Business]?

        businesses <-- data

        if businesses == nil {
            // Data was not structured as expected and deserialization failed, do something.
        } else {
            // Do something with your businesses array. 
        }
    }
}

और आपको इस तरह से एक बिजनेस क्लास बनाने की आवश्यकता है:

class Business: Deserializable {
    var id: Int?
    var name = "N/A"  // This one has a default value.

    required init(data: [String: AnyObject]) {
        id <-- data["id"]
        name <-- data["name"]
    }
}

तुम मेरे GitHub रेपो पर पूर्ण प्रलेखन पा सकते हैं। मज़े करो!


धन्यवाद! लेकिन मैं इसे करने के लिए एक कस्टम तरीके की तलाश कर रहा था क्योंकि यह एक विश्वविद्यालय परियोजना है जिस पर मैं काम कर रहा हूं, और मेरे पर्यवेक्षक बहुत खुश नहीं होंगे यदि वह देखता है कि मैं एक एपीआई का उपयोग कर रहा हूं।
हसन निजामानी

मेरी निजी परियोजनाओं पर अपने पुस्तकालय का उपयोग करेंगे। धन्यवाद!!
हसन निजामानी

खुशी है कि मैं एक या दूसरे तरीके से मदद करने में सक्षम था। आपकी परियोजनाओं पर शुभकामनाएँ! ^ ^
isair

6

के लिए स्विफ्ट 4 , मैं इस एक्सटेंशन का उपयोग कर लिखा Codable प्रोटोकॉल:

struct Business: Codable {
    var id: Int
    var name: String
}

extension String {

    func parse<D>(to type: D.Type) -> D? where D: Decodable {

        let data: Data = self.data(using: .utf8)!

        let decoder = JSONDecoder()

        do {
            let _object = try decoder.decode(type, from: data)
            return _object

        } catch {
            return nil
        }
    }
}

var jsonString = "[\n" +
    "{\n" +
    "\"id\":72,\n" +
    "\"name\":\"Batata Cremosa\",\n" +
    "},\n" +
    "{\n" +
    "\"id\":183,\n" +
    "\"name\":\"Caldeirada de Peixes\",\n" +
    "},\n" +
    "{\n" +
    "\"id\":76,\n" +
    "\"name\":\"Batata com Cebola e Ervas\",\n" +
    "},\n" +
    "{\n" +
    "\"id\":56,\n" +
    "\"name\":\"Arroz de forma\",\n" +
"}]"

let businesses = jsonString.parse(to: [Business].self)

4

के लिए iOS 10और Swift 3, का उपयोग कर Alamofire और चमक :

Alamofire.request("http://localhost:8080/category/en").responseJSON { response in

if let data = response.data {

    if let categories = [Category].from(data: response.data) {

        self.categories = categories

        self.categoryCollectionView.reloadData()
    } else {

        print("Casting error")
    }
  } else {

    print("Data is null")
  }
}

और यहाँ श्रेणी वर्ग है

import Gloss

struct Category: Decodable {

    let categoryId: Int?
    let name: String?
    let image: String?

    init?(json: JSON) {
        self.categoryId = "categoryId" <~~ json
        self.name = "name" <~~ json
        self.image = "image" <~~ json
    }
}

IMO, यह अब तक का सबसे सुरुचिपूर्ण समाधान है।


2
let jsonString = "{\"id\":123,\"Name\":\"Munish\"}"

स्ट्रिंग को NSData में कनवर्ट करें

 var data: NSData =jsonString.dataUsingEncoding(NSUTF8StringEncoding)!

 var error: NSError?

NSData को AnyObject में बदलें

var jsonObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(data,     options: NSJSONReadingOptions.allZeros, error: &error)

println("Error: \\(error)")

let id = (jsonObject as! NSDictionary)["id"] as! Int

let name = (jsonObject as! NSDictionary)["name"] as! String

println("Id: \\(id)")

println("Name: \\(name)")

2

मुझे आरडीसी की प्रतिक्रिया पसंद है, लेकिन JSON को सीमित करने के लिए शीर्ष स्तर पर केवल सरणियाँ क्यों हैं? मुझे शीर्ष स्तर पर एक शब्दकोश की अनुमति देने की आवश्यकता थी, इसलिए मैंने इसे इस प्रकार संशोधित किया:

extension String
{
    var parseJSONString: AnyObject?
    {
        let data = self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

        if let jsonData = data
        {
            // Will return an object or nil if JSON decoding fails
            do
            {
                let message = try NSJSONSerialization.JSONObjectWithData(jsonData, options:.MutableContainers)
                if let jsonResult = message as? NSMutableArray {
                    return jsonResult //Will return the json array output
                } else if let jsonResult = message as? NSMutableDictionary {
                    return jsonResult //Will return the json dictionary output
                } else {
                    return nil
                }
            }
            catch let error as NSError
            {
                print("An error occurred: \(error)")
                return nil
            }
        }
        else
        {
            // Lossless conversion of the string was not possible
            return nil
        }
    }

2

SWIFT4 - JSON स्ट्रिंग्स को डीकोड करने का आसान और सुरुचिपूर्ण तरीका।

पहला कदम - .utf8 एन्कोडिंग के साथ डेटा को स्ट्रिंग को एनकोड करें।

अपने डेटा को YourDataStruct से डीकोड करें।

struct YourDataStruct: Codable {

let type, id: String

init(_ json: String, using encoding: String.Encoding = .utf8) throws {
    guard let data = json.data(using: encoding) else {
        throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
    }
    try self.init(data: data)
}

init(data: Data) throws {
    self = try JSONDecoder().decode(YourDataStruct.self, from: data)
}                                                                      
}

do { let successResponse = try WSDeleteDialogsResponse(response) }
} catch {}

1

आप या तो परिवर्तित करने के लिए Swift.quicktype.io का उपयोग कर सकते हैं । यहां तक ​​कि आप स्विफ्ट के संस्करण का उल्लेख भी कर सकते हैं।JSONstructclass

उदाहरण JSON:

{
  "message": "Hello, World!"
}

उत्पन्न कोड:

import Foundation

typealias Sample = OtherSample

struct OtherSample: Codable {
    let message: String
}

// Serialization extensions

extension OtherSample {
    static func from(json: String, using encoding: String.Encoding = .utf8) -> OtherSample? {
        guard let data = json.data(using: encoding) else { return nil }
        return OtherSample.from(data: data)
    }

    static func from(data: Data) -> OtherSample? {
        let decoder = JSONDecoder()
        return try? decoder.decode(OtherSample.self, from: data)
    }

    var jsonData: Data? {
        let encoder = JSONEncoder()
        return try? encoder.encode(self)
    }

    var jsonString: String? {
        guard let data = self.jsonData else { return nil }
        return String(data: data, encoding: .utf8)
    }
}

extension OtherSample {
    enum CodingKeys: String, CodingKey {
        case message
    }
}

1

SwiftyJSON लाइब्रेरी का उपयोग करके , आप इसे पसंद कर सकते हैं

if let path : String = Bundle.main.path(forResource: "tiles", ofType: "json") {
    if let data = NSData(contentsOfFile: path) {
        let optData = try? JSON(data: data as Data)
        guard let json = optData else {
            return
        }
        for (_, object) in json {
            let name = object["name"].stringValue
            print(name)
        }
    }
} 

0

यहाँ आप चीजों को सरल और आसान बनाने के लिए एक नमूना है। मेरे डेटाबेस में मेरा स्ट्रिंग डेटा एक JSON फाइल है जो इस तरह दिखाई देती है:

[{"stype":"noun","sdsc":"careless disregard for consequences","swds":"disregard, freedom, impulse, licentiousness, recklessness, spontaneity, thoughtlessness, uninhibitedness, unrestraint, wantonness, wildness","anwds":"restraint, self-restraint"},{"stype":"verb","sdsc":"leave behind, relinquish","swds":"abdicate, back out, bail out, bow out, chicken out, cop out, cut loose, desert, discard, discontinue, ditch, drop, drop out, duck, dump, dust, flake out, fly the coop, give up the ship, kiss goodbye, leave, leg it, let go, opt out, pull out, quit, run out on, screw, ship out, stop, storm out, surrender, take a powder, take a walk, throw over, vacate, walk out on, wash hands of, withdraw, yield","anwds":"adopt, advance, allow, assert, begin, cherish, come, continue, defend, favor, go, hold, keep, maintain, persevere, pursue, remain, retain, start, stay, support, uphold"},{"stype":"verb","sdsc":"leave in troubled state","swds":"back out, desert, disown, forsake, jilt, leave, leave behind, quit, reject, renounce, throw over, walk out on","anwds":"adopt, allow, approve, assert, cherish, come, continue, defend, favor, keep, pursue, retain, stay, support, uphold"}]

इस JSON स्ट्रिंग डेटा को लोड करने के लिए, इन सरल चरणों का पालन करें। सबसे पहले, मेरे MoreData ऑब्जेक्ट के लिए इस तरह से एक क्लास बनाएं:

class  MoreData {
public private(set) var stype : String
public private(set) var sdsc : String
public private(set) var swds : String
public private(set) var anwds : String

init( stype : String, sdsc : String, swds : String, anwds : String) {

    self.stype = stype
    self.sdsc = sdsc
    self.swds = swds
    self.anwds = anwds
}}

दूसरा, मेरे JSON स्ट्रिंग के लिए मेरा स्ट्रिंग एक्सटेंशन इस तरह बनाएं:

extension  String {
func toJSON() -> Any? {
    guard let data = self.data(using: .utf8, allowLossyConversion: false) else { return nil }
    return try? JSONSerialization.jsonObject(with: data, options: .mutableContainers)
}}

तीसरा, मेरे स्ट्रिंग क्लास को इस तरह से मेरे स्ट्रिंग डेटा को बनाने के लिए बनाएं:

class Services {
static let instance: Services = Services()

func loadMoreDataByString(byString: String) -> [MoreData]{
    var  myVariable = [MoreData]()

    guard let ListOf = byString.toJSON() as? [[String: AnyObject]] else { return  [] }

    for object in ListOf {
        let stype  = object["stype"] as? String ?? ""
        let sdsc  = object["sdsc"] as? String ?? ""
         let swds  = object["swds"] as? String ?? ""
        let anwds  = object["anwds"] as? String ?? ""

        let myMoreData = MoreData(stype : stype, sdsc : sdsc, swds : swds, anwds : anwds)
        myVariable.append(myMoreData)
    }
    return myVariable
}}

अंत में, इस फ़ंक्शन को व्यू कंट्रोलर से इस तरह से टेबल व्यू में डेटा लोड करने के लिए कहें:

    func handlingJsonStringData(){
    moreData.removeAll(keepingCapacity: false)
    moreData =  Services.instance.loadMoreDataByString(byString: jsonString)
    print(self.moreData.count)
    tableView.reloadData()
}

0

यह किसी की मदद हो सकती है। इसी तरह का उदाहरण।

यह Codableडेटा को बाँधने के लिए हमारी कक्षा है। आप SwiftyJsonAccelerator का उपयोग करके आसानी से इस वर्ग को बना सकते हैं

 class ModelPushNotificationFilesFile: Codable {

  enum CodingKeys: String, CodingKey {
    case url
    case id
    case fileExtension = "file_extension"
    case name
  }

  var url: String?
  var id: Int?
  var fileExtension: String?
  var name: String?

  init (url: String?, id: Int?, fileExtension: String?, name: String?) {
    self.url = url
    self.id = id
    self.fileExtension = fileExtension
    self.name = name
  }

  required init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    url = try container.decodeIfPresent(String.self, forKey: .url)
    id = try container.decodeIfPresent(Int.self, forKey: .id)
    fileExtension = try container.decodeIfPresent(String.self, forKey: .fileExtension)
    name = try container.decodeIfPresent(String.self, forKey: .name)
  }

}

यह Json String है

    let jsonString = "[{\"name\":\"\",\"file_extension\":\"\",\"id\":10684,\"url\":\"https:\\/\\/homepages.cae.wisc.edu\\/~ece533\\/images\\/tulips.png\"},

{\"name\":\"\",\"file_extension\":\"\",\"id\":10684,\"url\":\"https:\\/\\/homepages.cae.wisc.edu\\/~ece533\\/images\\/arctichare.png\"},

{\"name\":\"\",\"file_extension\":\"\",\"id\":10684,\"url\":\"https:\\/\\/homepages.cae.wisc.edu\\/~ece533\\/images\\/serrano.png\"},

{\"name\":\"\",\"file_extension\":\"\",\"id\":10684,\"url\":\"https:\\/\\/homepages.cae.wisc.edu\\/~ece533\\/images\\/peppers.png\"},

{\"name\":\"\",\"file_extension\":\"\",\"id\":10684,\"url\":\"https:\\/\\/homepages.cae.wisc.edu\\/~ece533\\/images\\/pool.png\"}]"

यहां हम स्विफ्ट ऑब्जेक्ट में कनवर्ट करते हैं।

   let jsonData = Data(jsonString.utf8)

        let decoder = JSONDecoder()

        do {
            let fileArray = try decoder.decode([ModelPushNotificationFilesFile].self, from: jsonData)
            print(fileArray)
            print(fileArray[0].url)
        } catch {
            print(error.localizedDescription)
        }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.