2016-04-02 17 views
5

यहाँ नीचे Json उत्पादन के लिए कोड है:आईओएस स्विफ्ट में JSON से स्ट्रिंग को कैसे परिवर्तित करें?

let params : [[String : AnyObject]] = [["name" : "action", "value" : "pay" ],["name" : "cartJsonData" , "value" : ["total": 1,"rows":[["quantity": “1” ,"title":"Donation for SMSF India - General Fund","price":"1","itemId":"DN001","cost": “1”,”currency":"INR"]]]], ["name" : "center", "value" : "Chennai"], ["name" : "flatNumber", "value" : "503"], ["name" : "panNumber", "value" : ""], ["name" : "payWith"], ["name" : "reminderFrequency","value" : "Monthly"], ["name" : "shipToAddr1"], ["name" : "shipToAddr2"], ["name" : "shipToCity"], ["name" : "shipToCountryName" , "value" : "India"], ["name" : "shipToEmail", "value" : “[email protected]"], ["name" : "shipToFirstName" , "value": "4480101010"], ["name" : "shipToLastName"], ["name" : "shipToPhone", "value" : "4480101010"], ["name" : "shipToState"], ["name" : "shipToZip"], ["name" : "userId", "value" : “null”], ["name" : "shipToCountry", "value" : "IN"]] 

var jsonObject: NSData? = nil 

do { 
    jsonObject = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions()) 
    print(jsonObject) // This will print the below json. 
} 
catch{} 

मुद्रण JSONObject, मैं इस एक मिल गया।

[{ "मूल्य": "भुगतान", "नाम": "कार्रवाई"}, { "मूल्य": { "पंक्तियों": [{ "कीमत": "1", "मात्रा": "1", "लागत": "1", "मुद्रा": "आईएनआर", "आइटम आईडी": "डीएन 001", "शीर्षक": "एसएमएसएफ इंडिया - जनरल फंड के लिए दान" }], "कुल": 1}, "नाम": "कार्टजसनडाटा"}, {"मूल्य": "चेन्नई", "नाम": "केंद्र"}, {"मूल्य": "503", "नाम": "flatNumber"}, { "मूल्य": "", "नाम": "panNumber"}, {"name": "payWith"}, {"value": "मासिक", "नाम": "अनुस्मारक फ़्रिक्वेंसी"}, {"नाम" : "shipToAddr1"}, { "name": "shipToAddr2"}, {"name": "shipToCity"}, {"value": "India", "name": "shipToCountryName" }, {"value": "[email protected]", "name": "shipToEmail"}, {"value": "4480101010", "name": "shipToFirstName"}, {"name": " shipToLastName "}, {" value ": " 4480101010 "," name ":" shipToPhone "}, {" name ":" shipToState "}, { " नाम ":" shipToZip "}, {" value ":" अशक्त "," नाम ":" userId "}, { " मूल्य ":" में "," नाम ":" shipToCountry "}]

और मैं JSON नीचे प्रारूप में होना चाहता हूँ।

[{ "नाम": "कार्रवाई", "मूल्य": "भुगतान"}, { "नाम": "cartJsonData", "मूल्य": "{\" कुल \ ": 1, \ "पंक्तियां \": [{\ "itemId \": \ "DN002 \", \ "शीर्षक \": \ " के लिए दान एसएमएसएफ भारत - सामान्य फंड \", \ "मात्रा \": \ "100 \ ", \" मुद्रा \ ": \" INR \ ", \" मूल्य \ ": \" 1 \ ", \" लागत \ ": \" 100 \ "}]}" }, {"name": " केंद्र "," मूल्य ":" चेन्नई "}, {" नाम ":" फ्लैट नम्बर ", " मूल्य ":" "}, {" नाम ":" पैन नम्बर "," मान ":" एएसएसडीडीबीबीडीजेडी "}, { "नाम": "payWith"}, {"name": "अनुस्मारक फ़्रिक्वेंसी", "वैल ue ":" मासिक " }, {" नाम ":" shipToAddr1 "}, {" name ":" shipToAddr2 "}, {" name ": " shipToCity "}, {" name ":" shipToCountryName "," मूल्य ":" भारत "}, { " नाम ":" shipToEmail "," मूल्य ":" सुधाकर@gmail.com "}, {" नाम ": " शिप टॉफ़र्ननाम "," मूल्य ":" राजू "}, {"Name": "shipToLastName"}, { "name": "shipToPhone", "value": "1234567890"}, {"name": "shipToState"}, {"name": "shipToZip"}, { "नाम": "userId", "मूल्य": "अशक्त"}, { "नाम": "shipToCountry", "मूल्य": "में"}]

यह कैसे किया जा सकता है? केवल cartJsonData में मान बदलने की जरूरत है। क्या कोई इसे हल करने में मेरी मदद कर सकता है?

+0

'try' वाक्य रचना' jsonObject' कभी नहीं होगा का उपयोग करते हुए 'nil' – vadian

+0

यह क्या उत्पादन के साथ आपको परेशान करती है? ऐसा लगता है कि यह एक वैध जेसन है। मुझे लगता है कि आपको यह तथ्य पसंद नहीं है कि आपकी चाबियाँ और मान ऑर्डर बदल गए हैं .. इस मामले में आप इसे ठीक नहीं कर सकते हैं, क्योंकि शब्दकोश कुंजी के क्रम को सुरक्षित नहीं करता है, मेरा मतलब है कि आप अभी भी किसी भी तरह से काम कर सकते हैं खुद को जेसन आउटपुट करना या ऐसा करने के लिए कुछ अन्य lib का उपयोग करना, लेकिन ऐसा लगता है कि यह इसके लायक नहीं है। – igrek

+0

बीटीडब्ल्यू, शायद आपको 'WritingOptions.sortedKeys' विकल्प – igrek

उत्तर

24

इसे आजमाएं।

func jsonToString(json: AnyObject){ 
     do { 
      let data1 = try NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted) // first of all convert json to the data 
      let convertedString = String(data: data1, encoding: NSUTF8StringEncoding) // the data will be converted to the string 
      print(convertedString) // <-- here is ur string 

     } catch let myJSONError { 
      print(myJSONError) 
     } 

    } 
+0

में रुचि होगी! स्विफ्ट 3.1 रूपांतरण भी नीचे है! – BennyTheNerd

4

स्विफ्ट 3,1

func jsonToString(json: AnyObject){ 
    do { 
     let data1 = try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted) // first of all convert json to the data 
     let convertedString = String(data: data1, encoding: String.Encoding.utf8) // the data will be converted to the string 
     print(convertedString ?? "defaultvalue") 
    } catch let myJSONError { 
     print(myJSONError) 
    } 

} 
+1

स्विफ्ट 3 परिवर्तित एपीआई वाक्यविन्यास का उपयोग करने से अधिक है। स्विफ्ट 3 जेएसओएन में 'कोई भी' है, 'विकल्प' पैरामीटर छोड़ा जा सकता है (सुंदर मुद्रित प्रश्न में इरादा नहीं है),' परिवर्तित स्ट्रिंग 'कभी भी' शून्य '(स्विफ्ट 2 में भी नहीं) और' कैच 'स्कोप में कभी नहीं हो सकता 'लेट' असाइनमेंट के बिना बस 'प्रिंट (त्रुटि)' कर सकते हैं। – vadian

1

स्विफ्ट 4।0

static func stringify(json: Any, prettyPrinted: Bool = false) -> String { 
    var options: JSONSerialization.WritingOptions = [] 
    if prettyPrinted { 
     options = JSONSerialization.WritingOptions.prettyPrinted 
    } 

    do { 
     let data = try JSONSerialization.data(withJSONObject: json, options: options) 
     if let string = String(data: data, encoding: String.Encoding.utf8) { 
     return string 
     } 
    } catch { 
     print(error) 
    } 

    return "" 
} 

प्रयोग

stringify(json: ["message": "Hello."]) 
संबंधित मुद्दे