मैंने अगला शब्दकोश बनाया है:
var postJSON = [ids[0]:answersArray[0], ids[1]:answersArray[1], ids[2]:answersArray[2]] as Dictionary
और मुझे मिलता है:
[2: B, 1: A, 3: C]
तो, मैं इसे JSON में कैसे बदल सकता हूं?
मैंने अगला शब्दकोश बनाया है:
var postJSON = [ids[0]:answersArray[0], ids[1]:answersArray[1], ids[2]:answersArray[2]] as Dictionary
और मुझे मिलता है:
[2: B, 1: A, 3: C]
तो, मैं इसे JSON में कैसे बदल सकता हूं?
जवाबों:
स्विफ्ट 3.0
स्विफ्ट 3 के साथ, स्विफ्ट एपीआई डिजाइन दिशानिर्देशों केNSJSONSerialization
अनुसार, और इसके तरीकों का नाम बदल गया है ।
let dic = ["2": "B", "1": "A", "3": "C"]
do {
let jsonData = try JSONSerialization.data(withJSONObject: dic, options: .prettyPrinted)
// here "jsonData" is the dictionary encoded in JSON data
let decoded = try JSONSerialization.jsonObject(with: jsonData, options: [])
// here "decoded" is of type `Any`, decoded from JSON data
// you can now cast it with the right type
if let dictFromJSON = decoded as? [String:String] {
// use dictFromJSON
}
} catch {
print(error.localizedDescription)
}
स्विफ्ट 2.x
do {
let jsonData = try NSJSONSerialization.dataWithJSONObject(dic, options: NSJSONWritingOptions.PrettyPrinted)
// here "jsonData" is the dictionary encoded in JSON data
let decoded = try NSJSONSerialization.JSONObjectWithData(jsonData, options: [])
// here "decoded" is of type `AnyObject`, decoded from JSON data
// you can now cast it with the right type
if let dictFromJSON = decoded as? [String:String] {
// use dictFromJSON
}
} catch let error as NSError {
print(error)
}
स्विफ्ट 1
var error: NSError?
if let jsonData = NSJSONSerialization.dataWithJSONObject(dic, options: NSJSONWritingOptions.PrettyPrinted, error: &error) {
if error != nil {
println(error)
} else {
// here "jsonData" is the dictionary encoded in JSON data
}
}
if let decoded = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as? [String:String] {
if error != nil {
println(error)
} else {
// here "decoded" is the dictionary decoded from JSON data
}
}
[2: A, 1: A, 3: A]
। लेकिन घुंघराले कोष्ठक के बारे में क्या?
{"result":[{"body":"Question 3"}] }
dataWithJSONObject
हैं जिसके परिणामस्वरूप के भाग के रूप "कर्ली कोष्ठक" (यानी ब्रेसिज़) का उत्पादन NSData
वस्तु।
आप गलत धारणा बना रहे हैं। सिर्फ इसलिए कि डिबगर / प्लेग्राउंड आपके शब्दकोश को चौकोर कोष्ठक (जो कि कोको को कैसे प्रदर्शित करता है) में दिखाता है, इसका मतलब यह नहीं है कि JSON आउटपुट स्वरूपित है।
यहाँ उदाहरण कोड है जो स्ट्रिंग के एक शब्दकोश को JSON में बदल देगा:
स्विफ्ट 3 संस्करण:
import Foundation
let dictionary = ["aKey": "aValue", "anotherKey": "anotherValue"]
if let theJSONData = try? JSONSerialization.data(
withJSONObject: dictionary,
options: []) {
let theJSONText = String(data: theJSONData,
encoding: .ascii)
print("JSON string = \(theJSONText!)")
}
ऊपर "बहुत मुद्रित" प्रारूप में प्रदर्शित करने के लिए आप विकल्प लाइन को इसमें बदलेंगे:
options: [.prettyPrinted]
या स्विफ्ट 2 सिंटैक्स में:
import Foundation
let dictionary = ["aKey": "aValue", "anotherKey": "anotherValue"]
let theJSONData = NSJSONSerialization.dataWithJSONObject(
dictionary ,
options: NSJSONWritingOptions(0),
error: nil)
let theJSONText = NSString(data: theJSONData!,
encoding: NSASCIIStringEncoding)
println("JSON string = \(theJSONText!)")
उसी का आउटपुट है
"JSON string = {"anotherKey":"anotherValue","aKey":"aValue"}"
या सुंदर प्रारूप में:
{
"anotherKey" : "anotherValue",
"aKey" : "aValue"
}
शब्दकोश JSON आउटपुट में घुंघराले ब्रेसिज़ में संलग्न है, जैसा कि आप उम्मीद करेंगे।
स्विफ्ट 3/4 सिंटैक्स में, उपरोक्त कोड इस तरह दिखता है:
let dictionary = ["aKey": "aValue", "anotherKey": "anotherValue"]
if let theJSONData = try? JSONSerialization.data(
withJSONObject: dictionary,
options: .prettyPrinted
),
let theJSONText = String(data: theJSONData,
encoding: String.Encoding.ascii) {
print("JSON string = \n\(theJSONText)")
}
}
स्विफ्ट 5:
let dic = ["2": "B", "1": "A", "3": "C"]
let encoder = JSONEncoder()
if let jsonData = try? encoder.encode(dic) {
if let jsonString = String(data: jsonData, encoding: .utf8) {
print(jsonString)
}
}
ध्यान दें कि कुंजियाँ और मान लागू होने चाहिए Codable
। स्ट्रिंग्स, इनट्स, और डबल्स (और अधिक) पहले से ही हैं Codable
। कस्टम प्रकार एन्कोडिंग और डिकोडिंग देखें ।
आपके प्रश्न के लिए मेरा उत्तर नीचे है
let dict = ["0": "ArrayObjectOne", "1": "ArrayObjecttwo", "2": "ArrayObjectThree"]
var error : NSError?
let jsonData = try! NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions.PrettyPrinted)
let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)! as String
print(jsonString)
जवाब है
{
"0" : "ArrayObjectOne",
"1" : "ArrayObjecttwo",
"2" : "ArrayObjectThree"
}
स्विफ्ट 4 Dictionary
एक्सटेंशन।
extension Dictionary {
var jsonStringRepresentation: String? {
guard let theJSONData = try? JSONSerialization.data(withJSONObject: self,
options: [.prettyPrinted]) else {
return nil
}
return String(data: theJSONData, encoding: .ascii)
}
}
encoding: .ascii
सार्वजनिक विस्तार में इसका उपयोग करना अच्छा नहीं है । .utf8
ज्यादा सुरक्षित होगा!
कभी-कभी डीबगिंग उद्देश्यों के लिए सर्वर की प्रतिक्रिया को प्रिंट करना आवश्यक होता है। यहां एक फ़ंक्शन है जिसका मैं उपयोग करता हूं:
extension Dictionary {
var json: String {
let invalidJson = "Not a valid JSON"
do {
let jsonData = try JSONSerialization.data(withJSONObject: self, options: .prettyPrinted)
return String(bytes: jsonData, encoding: String.Encoding.utf8) ?? invalidJson
} catch {
return invalidJson
}
}
func printJson() {
print(json)
}
}
उपयोग का उदाहरण:
(lldb) po dictionary.printJson()
{
"InviteId" : 2,
"EventId" : 13591,
"Messages" : [
{
"SenderUserId" : 9514,
"MessageText" : "test",
"RecipientUserId" : 9470
},
{
"SenderUserId" : 9514,
"MessageText" : "test",
"RecipientUserId" : 9470
}
],
"TargetUserId" : 9470,
"InvitedUsers" : [
9470
],
"InvitingUserId" : 9514,
"WillGo" : true,
"DateCreated" : "2016-08-24 14:01:08 +00:00"
}
स्विफ्ट 3 :
let jsonData = try? JSONSerialization.data(withJSONObject: dict, options: [])
let jsonString = String(data: jsonData!, encoding: .utf8)!
print(jsonString)
आपके प्रश्न का उत्तर नीचे है:
स्विफ्ट 2.1
do {
if let postData : NSData = try NSJSONSerialization.dataWithJSONObject(dictDataToBeConverted, options: NSJSONWritingOptions.PrettyPrinted){
let json = NSString(data: postData, encoding: NSUTF8StringEncoding)! as String
print(json)}
}
catch {
print(error)
}
यहाँ यह करने के लिए एक आसान विस्तार है:
https://gist.github.com/stevenojo/0cb8afcba721838b8dcb115b846727c3
extension Dictionary {
func jsonString() -> NSString? {
let jsonData = try? JSONSerialization.data(withJSONObject: self, options: [])
guard jsonData != nil else {return nil}
let jsonString = String(data: jsonData!, encoding: .utf8)
guard jsonString != nil else {return nil}
return jsonString! as NSString
}
}
private func convertDictToJson(dict : NSDictionary) -> NSDictionary?
{
var jsonDict : NSDictionary!
do {
let jsonData = try JSONSerialization.data(withJSONObject:dict, options:[])
let jsonDataString = String(data: jsonData, encoding: String.Encoding.utf8)!
print("Post Request Params : \(jsonDataString)")
jsonDict = [ParameterKey : jsonDataString]
return jsonDict
} catch {
print("JSON serialization failed: \(error)")
jsonDict = nil
}
return jsonDict
}
NSJSONSerialization