मुझे उपयोग करके dictionary
उत्पन्न करने की आवश्यकता है । क्या इसे परिवर्तित करना संभव है? क्या आप लोग इस पर मदद कर सकते हैं?JSON string
dictionary
मुझे उपयोग करके dictionary
उत्पन्न करने की आवश्यकता है । क्या इसे परिवर्तित करना संभव है? क्या आप लोग इस पर मदद कर सकते हैं?JSON string
dictionary
जवाबों:
इस सुपर-आसान बनाने के लिए NSArray और NSDictionary के लिए श्रेणियां हैं। मैंने सुंदर-प्रिंट के लिए एक विकल्प जोड़ा है (नए सिरे से और पढ़ने में आसान बनाने के लिए टैब)।
@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
एक या दो मिनट में पता चलेगा -
Apple ने iOS 5.0 और Mac OS X 10.7 में एक JSON पार्सर और धारावाहिक जोड़ा। NSJSONSerialization देखें ।
एक NSSON या NSArray से JSON स्ट्रिंग उत्पन्न करने के लिए, आपको अब किसी तीसरे पक्ष के ढांचे को आयात करने की आवश्यकता नहीं है।
यहां है कि इसे कैसे करना है:
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 लौटाता है
नोट: यह जवाब iOS 5 जारी होने से पहले दिया गया था।
Json- फ्रेमवर्क प्राप्त करें और यह करें:
#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 ले रहा हूँ।
NSMutableDictionary *contentDictionary = [[NSMutableDictionary alloc]init];
[contentDictionary setValue:@"a" forKey:@"b"];
[contentDictionary setValue:@"c" forKey:@"d"];
एक NSSON या NSArray से JSON स्ट्रिंग उत्पन्न करने के लिए, आपको किसी तीसरे पक्ष के ढांचे को आयात करने की आवश्यकता नहीं है। बस निम्नलिखित कोड का उपयोग करें: -
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'
त्रुटि को दूर कर रहा हूं । XCode 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
}
अब किसी तीसरे पक्ष के वर्ग की आवश्यकता नहीं है IOS 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)")
}
}
ISO7 के रूप में कम से कम आप आसानी से NSJSONSerialization के साथ ऐसा कर सकते हैं ।
यहाँ स्विफ्ट 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()
यह स्विफ्ट 4 और स्विफ्ट 5 में काम करेगा।
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)
}
}
}
यह मूल उद्देश्य-सी प्रिंट शैली के बहुत करीब है