আইওএসে এনএসডেটরিয় থেকে জেএসএন স্ট্রিং তৈরি করুন


338

আমার একটি ব্যবহার করে dictionaryজেনারেট করা দরকার । এটি কি রূপান্তর করা সম্ভব? আপনি দয়া করে এই সাহায্য করতে পারেন?JSON stringdictionary


3
@RicardoRivaldo যে এই
— Qed

18
গুগল অনুসন্ধান থেকে যে কেউ এখানে আসছেন, দয়া করে নীচের উত্তরটি পড়ুন @ গুইলিউমে
— মহেন্দ্র লিয়া

উত্তর:


233

এই অতি-সহজ করে তোলার জন্য এখানে এনএসআরারি এবং এনএসডি অভিধানের বিভাগ রয়েছে। আমি প্রিটি-প্রিন্টের জন্য একটি বিকল্প যুক্ত করেছি (পড়ার সহজ করার জন্য নিউলাইনস এবং ট্যাবগুলি)।

@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

8
যদি আমরা এনএসওজেক্টের একটি বিভাগ তৈরি করি এবং একই পদ্ধতিটি রাখি, তবে এটি এনএসআরাই এবং এনএসডিকোরিয়ান উভয়ের পক্ষে কাজ করে। দুটি পৃথক ফাইল / ইন্টারফেস লেখার দরকার নেই। এবং এটি ত্রুটির ক্ষেত্রে শূন্য করা উচিত।
— আবদুল্লাহ উমর

আপনি কেন NSUTF8StringEncodingএটি সঠিক এনকোডিং বলে ধরে নিচ্ছেন?
— সীমানা

5
কিছু নয়, ডকুমেন্টেশনটি বলে "ফলস্বরূপ তথ্যটি ইউটিএফ -8 এ একটি এনকোডড।"
— সীমানা

যে কি আমি খুব কাজ করেছি আমি অনুমান এটি উপর কাজ করব @AbdullahUmer NSNumber, NSStringএবং NSNullএক বা দুই মিনিটে খুঁজে বের করতে হবে -
— বেনজোহান

756

অ্যাপল আইওএস 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];
}

88
এটি একটি ভাল পরামর্শ ... প্রকল্পগুলি তৃতীয় পক্ষের লাইব্রেরিগুলির একটি টানা থাকা সত্যিই বিরক্তিকর।
— জাকদানস

3
JSON অবজেক্টে রূপান্তর করার জন্য দুর্দান্ত সমাধান। দুর্দান্ত কাজ .. :)
— এমএস।

1
+1 এটিকে বিভাগ হিসাবে যুক্ত করা NSArrayএবং NSDictionaryএটি পুনরায় ব্যবহার করা আরও সহজ।
— ডিভাইস 1

কীভাবে জসনকে অভিধানে ফিরিয়ে আনবেন?
— ওএমজিপিওপ

5
@OMGPOP - [NSJSONSerialization JSONObjectWithData:options:error:]প্রদত্ত JSON তথ্য থেকে আয় একটি ফাউন্ডেশন objec
— Lukasz 'Severiaan' Grela

61

একটি এনএসডি অভিধানকে একটি এনএসএস স্ট্রিংয়ে রূপান্তর করতে:

NSError * err;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:myDictionary options:0 error:&err]; 
NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

34

দ্রষ্টব্য: আইওএস 5 প্রকাশের আগে এই উত্তর দেওয়া হয়েছিল।

জসন-ফ্রেমওয়ার্ক পান এবং এটি করুন:

#import "SBJsonWriter.h"

...

SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];

NSString *jsonString = [jsonWriter stringWithObject:myDictionary];  

[jsonWriter release];

myDictionary আপনার অভিধান হবে।


আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ. আপনি কীভাবে আমার অ্যাপ্লিকেশনটিতে কাঠামো যুক্ত করবেন তা আমাকে পরামর্শ দিতে পারেন, মনে হচ্ছে স্টিগ-জসন-ফ্রেমওয়ার্ক -৩b বি 8৩৮ এ-তে অনেকগুলি ফোল্ডার রয়েছে
— চন্দ্রশেখর

@ চন্দ্রশেখর গিট সংগ্রহস্থলটি ক্লোন করার পরে আপনার প্রকল্পে ক্লাস / ফোল্ডার যুক্ত করা যথেষ্ট।
— নিক ওয়েইवर

1
এটিকে পুরোপুরি চিত্রিত করার জন্য আমি কেবল স্ট্যাকওভারফ্লো.com/ জিজ্ঞাসা / ১১505050০37/// লিখেছি । ত্রুটি পরীক্ষা এবং উপদেশের কিছু টুকরো অন্তর্ভুক্ত করুন।
— পাস্কাল

25

নিম্নলিখিতটি ডিবাগারে প্রবেশ করে আপনি অন-ফ্লাইতেও এটি করতে পারেন

po [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:yourDictionary options:1 error:nil] encoding:4];

4
হার্ড কোডেড ধ্রুবকগুলি কিছুটা ভীতিজনক। এনএসইউটিএফ 8 স্ট্রিংএকনডিং ইত্যাদি ব্যবহার করবেন না কেন?
— ইয়ান নিউজন

5
এটি বর্তমানে এলএলডিবিতে কাজ করে না:error: use of undeclared identifier 'NSUTF8StringEncoding'
— অ্যান্ডি

2
সেই মুহুর্তগুলির জন্য উপযুক্ত যেখানে আপনি খুব দ্রুত কোনও বাহ্যিক জসন সম্পাদক সহ একটি অভিধান তদন্ত করতে চান!
— ফ্লোরিয়ান

15

আপনি অ্যারে বা অভিধান পাস করতে পারেন। এখানে, আমি এনএসমিটেবল ডিকোশনারি নিচ্ছি।

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);

12
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
— দয়া কেভিন

7

ইন সুইফট (সংস্করণ 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
}

3

এখন কোনও তৃতীয় পক্ষের ক্লাসের দরকার নেই আইওএস 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।
— এএফপি

1

সুইফটে, আমি নিম্নলিখিত সহায়ক ফাংশনটি তৈরি করেছি:

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)")
    }
}


1

এখানে সুইফট 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()

এটি অনুরোধ করা প্রশ্নের মতো সঞ্চালন করবে না, স্ট্রিনে স্কোয়াশ করার চেষ্টা করার সময় প্রিন্টিপ্রিন্ট ফাঁকা স্থান ধরে রাখে।
— শান লটার্ন

1

এটি 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)

-1
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)
        }
    }
}

এটি মূল আসল উদ্দেশ্য-সি প্রিন্ট শৈলীর খুব কাছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.