আমার একটি ব্যবহার করে dictionary
জেনারেট করা দরকার । এটি কি রূপান্তর করা সম্ভব? আপনি দয়া করে এই সাহায্য করতে পারেন?JSON string
dictionary
আমার একটি ব্যবহার করে dictionary
জেনারেট করা দরকার । এটি কি রূপান্তর করা সম্ভব? আপনি দয়া করে এই সাহায্য করতে পারেন?JSON string
dictionary
উত্তর:
এই অতি-সহজ করে তোলার জন্য এখানে এনএসআরারি এবং এনএসডি অভিধানের বিভাগ রয়েছে। আমি প্রিটি-প্রিন্টের জন্য একটি বিকল্প যুক্ত করেছি (পড়ার সহজ করার জন্য নিউলাইনস এবং ট্যাবগুলি)।
@interface NSDictionary (BVJSONString)
-(NSString*) bv_jsonStringWithPrettyPrint:(BOOL) prettyPrint;
@end
।
@implementation NSDictionary (BVJSONString)
-(NSString*) bv_jsonStringWithPrettyPrint:(BOOL) prettyPrint {
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self
options:(NSJSONWritingOptions) (prettyPrint ? NSJSONWritingPrettyPrinted : 0)
error:&error];
if (! jsonData) {
NSLog(@"%s: error: %@", __func__, error.localizedDescription);
return @"{}";
} else {
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
}
@end
।
@interface NSArray (BVJSONString)
- (NSString *)bv_jsonStringWithPrettyPrint:(BOOL)prettyPrint;
@end
।
@implementation NSArray (BVJSONString)
-(NSString*) bv_jsonStringWithPrettyPrint:(BOOL) prettyPrint {
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self
options:(NSJSONWritingOptions) (prettyPrint ? NSJSONWritingPrettyPrinted : 0)
error:&error];
if (! jsonData) {
NSLog(@"%s: error: %@", __func__, error.localizedDescription);
return @"[]";
} else {
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
}
@end
NSUTF8StringEncoding
এটি সঠিক এনকোডিং বলে ধরে নিচ্ছেন?
NSNumber
, NSString
এবং NSNull
এক বা দুই মিনিটে খুঁজে বের করতে হবে -
অ্যাপল আইওএস 5.0 এবং ম্যাক ওএস এক্স 10.7 এ একটি জেএসএন পার্সার এবং সিরিয়ালাইজার যুক্ত করেছে। এনএসজেএসএসনারাইজেশন দেখুন ।
এনএসডিকোরি বা এনএসআরে থেকে জেএসএন স্ট্রিং তৈরি করতে আপনার আর কোনও তৃতীয় পক্ষের কাঠামো আমদানি করতে হবে না।
কিভাবে করতে হবে এখানে আছে:
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionaryOrArrayToOutput
options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
error:&error];
if (! jsonData) {
NSLog(@"Got an error: %@", error);
} else {
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
NSArray
এবং NSDictionary
এটি পুনরায় ব্যবহার করা আরও সহজ।
[NSJSONSerialization JSONObjectWithData:options:error:]
প্রদত্ত JSON তথ্য থেকে আয় একটি ফাউন্ডেশন objec
দ্রষ্টব্য: আইওএস 5 প্রকাশের আগে এই উত্তর দেওয়া হয়েছিল।
জসন-ফ্রেমওয়ার্ক পান এবং এটি করুন:
#import "SBJsonWriter.h"
...
SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];
NSString *jsonString = [jsonWriter stringWithObject:myDictionary];
[jsonWriter release];
myDictionary
আপনার অভিধান হবে।
নিম্নলিখিতটি ডিবাগারে প্রবেশ করে আপনি অন-ফ্লাইতেও এটি করতে পারেন
po [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:yourDictionary options:1 error:nil] encoding:4];
error: use of undeclared identifier 'NSUTF8StringEncoding'
আপনি অ্যারে বা অভিধান পাস করতে পারেন। এখানে, আমি এনএসমিটেবল ডিকোশনারি নিচ্ছি।
NSMutableDictionary *contentDictionary = [[NSMutableDictionary alloc]init];
[contentDictionary setValue:@"a" forKey:@"b"];
[contentDictionary setValue:@"c" forKey:@"d"];
এনএসডিকোরি বা এনএসআরে থেকে জেএসএন স্ট্রিং তৈরি করতে আপনার কোনও তৃতীয় পক্ষের কাঠামো আমদানি করতে হবে না। শুধু নিম্নলিখিত কোড ব্যবহার করুন:
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:contentDictionary // Here you can pass array or dictionary
options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
error:&error];
NSString *jsonString;
if (jsonData) {
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
//This is your JSON String
//NSUTF8StringEncoding encodes special characters using an escaping scheme
} else {
NSLog(@"Got an error: %@", error);
jsonString = @"";
}
NSLog(@"Your JSON String is %@", jsonString);
NSMutableDictionary *contentDictionary = [[NSMutableDictionary alloc]init];
[contentDictionary setValue:@"a" forKey:@"b"];
[contentDictionary setValue:@"c" forKey:@"d"];
NSData *data = [NSJSONSerialization dataWithJSONObject:contentDictionary options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonStr = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
+[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write'
ত্রুটি পাচ্ছি । এক্সকোড 9.0
ইন সুইফট (সংস্করণ 2.0) :
class func jsonStringWithJSONObject(jsonObject: AnyObject) throws -> String? {
let data: NSData? = try? NSJSONSerialization.dataWithJSONObject(jsonObject, options: NSJSONWritingOptions.PrettyPrinted)
var jsonStr: String?
if data != nil {
jsonStr = String(data: data!, encoding: NSUTF8StringEncoding)
}
return jsonStr
}
এখন কোনও তৃতীয় পক্ষের ক্লাসের দরকার নেই আইওএস 5 চালু করা এনএসজেসনসিরিয়ালাইজেশন
NSString *urlString=@"Your url";
NSString *urlUTF8 = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[[NSURL alloc]initWithString:urlUTF8];
NSURLRequest *request=[NSURLRequest requestWithURL:url];
NSURLResponse *response;
NSData *GETReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
NSError *myError = nil;
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:GETReply options:NSJSONReadingMutableLeaves|| NSJSONReadingMutableContainers error:&myError];
Nslog(@"%@",res);
এই কোডটি jsondata পাওয়ার জন্য দরকারী হতে পারে।
NSJSONReadingMutableLeaves | NSJSONReadingMutableContainers
।
সুইফটে, আমি নিম্নলিখিত সহায়ক ফাংশনটি তৈরি করেছি:
class func nsobjectToJSON(swiftObject: NSObject) {
var jsonCreationError: NSError?
let jsonData: NSData = NSJSONSerialization.dataWithJSONObject(swiftObject, options: NSJSONWritingOptions.PrettyPrinted, error: &jsonCreationError)!
if jsonCreationError != nil {
println("Errors: \(jsonCreationError)")
}
else {
// everything is fine and we have our json stored as an NSData object. We can convert into NSString
let strJSON : NSString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)!
println("\(strJSON)")
}
}
আইএসও 7-তে অন্তত আপনি সহজেই এনএসজেএসএসনারাইজেশন দিয়ে এটি করতে পারেন ।
এখানে সুইফট 4 সংস্করণ রয়েছে
extension NSDictionary{
func toString() throws -> String? {
do {
let data = try JSONSerialization.data(withJSONObject: self, options: .prettyPrinted)
return String(data: data, encoding: .utf8)
}
catch (let error){
throw error
}
}
}
ব্যবহারের উদাহরণ
do{
let jsonString = try dic.toString()
}
catch( let error){
print(error.localizedDescription)
}
অথবা আপনি যদি নিশ্চিত হন যে এটি বৈধ অভিধান তবে আপনি ব্যবহার করতে পারেন
let jsonString = try? dic.toString()
এটি swift4 এবং swift5 এ কাজ করবে।
let dataDict = "the dictionary you want to convert in jsonString"
let jsonData = try! JSONSerialization.data(withJSONObject: dataDict, options: JSONSerialization.WritingOptions.prettyPrinted)
let jsonString = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)! as String
print(jsonString)
public func jsonPrint(_ o: NSObject, spacing: String = "", after: String = "", before: String = "") {
let newSpacing = spacing + " "
if o.isArray() {
print(before + "[")
if let a = o as? Array<NSObject> {
for object in a {
jsonPrint(object, spacing: newSpacing, after: object == a.last! ? "" : ",", before: newSpacing)
}
}
print(spacing + "]" + after)
} else {
if o.isDictionary() {
print(before + "{")
if let a = o as? Dictionary<NSObject, NSObject> {
for (key, val) in a {
jsonPrint(val, spacing: newSpacing, after: ",", before: newSpacing + key.description + " = ")
}
}
print(spacing + "}" + after)
} else {
print(before + o.description + after)
}
}
}
এটি মূল আসল উদ্দেশ্য-সি প্রিন্ট শৈলীর খুব কাছে