আমি পরবর্তী অভিধান তৈরি করেছি:
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)
}
সুইফট ঘ
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