मैंने देखा है कि जबकि Quicktype.io JSON को SWIFT में पार्स करने का बहुत अच्छा काम करता है, कभी-कभी यह बहुत सारे सहायक कार्यों और विधियों का सहारा लेता है। निम्नलिखित के लिए, इसने लगभग 15 अतिरिक्त विधियाँ उत्पन्न कीं। इनमें से कुछ परिचित हैं जैसे NSNull, हालांकि, दो मेरे लिए अपरिचित हैं जैसे JSONAny और ऐसा लगता है कि उनके आसपास एक रास्ता होना चाहिए। उदाहरण के लिए JSONAny वर्ग में लगभग 12 कार्य हैं और इसका उपयोग केवल एक फ़ील्ड को पार्स करने के लिए किया जाता है जो मेरे लिए उतना महत्वपूर्ण नहीं है।

यहाँ JSON कैसा दिखता है:

[{"name":"Afghanistan","topLevelDomain":[".af"],"alpha2Code":"AF","alpha3Code":"AFG","callingCodes":["93"],"capital":"Kabul","altSpellings":["AF","Afġānistān"],"region":"Asia","subregion":"Southern Asia","population":27657145,"latlng":[33.0,65.0],"demonym":"Afghan","area":652230.0,"gini":27.8,"timezones":["UTC+04:30"],"borders":["IRN","PAK","TKM","UZB","TJK","CHN"],"nativeName":"افغانستان","numericCode":"004","currencies":[{"code":"AFN","name":"Afghan afghani","symbol":"؋"}],"languages":[{"iso639_1":"ps","iso639_2":"pus","name":"Pashto","nativeName":"پښتو"},{"iso639_1":"uz","iso639_2":"uzb","name":"Uzbek","nativeName":"Oʻzbek"},{"iso639_1":"tk","iso639_2":"tuk","name":"Turkmen","nativeName":"Türkmen"}],"translations":{"de":"Afghanistan","es":"Afganistán","fr":"Afghanistan","ja":"アフガニスタン","it":"Afghanistan","br":"Afeganistão","pt":"Afeganistão","nl":"Afghanistan","hr":"Afganistan","fa":"افغانستان"},"flag":"https://restcountries.eu/data/afg.svg","regionalBlocs":[{"acronym":"SAARC","name":"South Asian Association for Regional Cooperation","otherAcronyms":[],"otherNames":[]}],"cioc":"AFG"}]

मैं सभी कोड नहीं दूंगा कि वह संरचना मुख्य संरचना से एक स्तर नीचे है:

 struct CountryReturnedElement: Codable {
       //...various fields  
        let regionalBlocs: [RegionalBloc]
    }

   // MARK: - RegionalBloc
    struct RegionalBloc: Codable {
        let acronym, name: String
        let otherAcronyms, otherNames: [JSONAny]
    }

जिसे केवल निम्नलिखित JSON को डीकोड करने के लिए डिज़ाइन किया गया है:

"regionalBlocs":[{"acronym":"SAARC","name":"South Asian Association for Regional Cooperation","otherAcronyms":[],"otherNames":[]}]

वस्तुतः पंद्रह कार्यों और विधियों के साथ सहायक कक्षाओं का सहारा लिए बिना उपरोक्त को पार्स करने का कोई आसान तरीका है। मुझे पूरी संभावना है, अन्य शब्दकोष और अन्य नाम तार हैं इसलिए मुझे लगता है कि मैं [स्ट्रिंग?] जा सकता हूं। हालांकि, मुझे लगता है कि मुझे नहीं पता कि 100% निश्चितता के साथ, 95% निश्चितता की तरह।

किसी भी सुझाव के लिए धन्यवाद।

0
user6631314 28 जुलाई 2020, 19:18

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप सुनिश्चित हैं कि otherAcronyms और otherNames कुंजियाँ [String?] वापस आती हैं, तो आप RegionalBloc संरचना को [String?] स्वीकार करने के लिए संशोधित कर सकते हैं।

struct RegionalBloc: Codable {
    let acronym, name: String
    let otherAcronyms, otherNames: [String?]
}

आप बस इसे आज़मा सकते हैं और यदि JSONDecoder कोई त्रुटि नहीं देता है तो आप अच्छे हैं और [String?] के साथ जारी रख सकते हैं। अन्यथा, आप त्रुटि की जांच कर सकते हैं और आने वाले प्रकार की जांच करने और इसे सेट करने के लिए इसे कंसोल पर प्रिंट कर सकते हैं।

1
Frankenstein 28 जुलाई 2020, 19:31