मैं एक ऑब्जेक्ट किए गए JSON संरचना को मुद्रित करने का प्रयास कर रहा हूं जिसे मैं पदानुक्रम में एकाधिक शब्दकोशों में सहेज रहा हूं। मैं NSObject की description
विधि के माध्यम से ऐसा करना चाहता हूं ताकि प्रत्येक नेस्टेड डिक्शनरी की वर्णन विधि को इसके मूल्य को भी वापस करने के लिए कहा जाता है।नेस्टेड NSDictionary विवरण एस्केप कैरेक्टर समस्याएं
वांछित परिणाम
//First Hierarchal Level
//Second Hierarchal Level
//Third Hierarchal Level
People =
(
{
Name = Person 1
Gender = Male
Addresses =
(
{
Address Name = Home Address
Street = 123 Street St.
City = NewCity
State = AZ
Zip = 12345
Country = USA
}
)
Cars =
(
{
Make = Ford
Model = NewFord
Insured Drivers =
(
{
Name = Person 1
},
{
Name = Person 2
}
)
}
)
}
)
//NOTE: Sample untested nested structure
हालांकि, मैं एक मुद्दा है कि प्रत्येक नेस्टेड शब्दकोश के लिए बदले स्ट्रिंग पदानुक्रम कि वापसी स्ट्रिंग के माध्यम से पारित हो जाता है के प्रत्येक स्तर के लिए एक बार भाग गया हो रही है में चल गया है।
वास्तविक परिणाम
People = \n (\n {\n Name = Person 1\\\n Gender = Male\\\n Addresses =\\\n (\\\n {\\\n Address Name = Home Address\\\n Street = 123 Street St.\\\n City = NewCity\\\n State = AZ\\\n Zip = 12345\\\n Country = USA\\\n }\\\n)\\\n Cars = \\\n (\\\n {\\\\\\\n Make = Ford\\\\\\\n Model = NewFord\\\\\\\n Insured Drivers = \\\\\\\n (\\\\\\\n {\\\\\\\\\\\\\n Name = Person 1\\\\\\\\\\\\\n },\\\\\\\\\\\\\n {\\\\\\\\\\\\\n Name = Person 2\\\\\\\\\\\\\n }\\\\\\\n)\\\\\\\n }\\\n) \n }\n)
मैंने पढ़ा है कि यह कैसे वर्णन वजह से यह किसी syslog उपयोगिता की तरह कुछ का उपयोग कर के लिए इन भागने पात्रों कहते हैं के साथ क्या करना है, फिर भी मेरा मानना है कि कार्यक्षमता है कि मैं इच्छा उपलब्ध है एनएसएआरएआरई इस तरीके के तरीके के बारे में बताता है कि जिस तरह से मैं चाहता हूं। मैंने परिणाम स्ट्रिंग के माध्यम से पुनरावृत्ति करने और बचने वाले पात्रों को पार्स करने का प्रयास किया है, लेकिन अब तक का सबसे अच्छा परिणाम जो मैंने साथ आया है, सभी शब्दकोशों में सभी गुणों की एक गैर-श्रेणीबद्ध सूची है।
बेस्ट प्रयास
People =
(
{
Name = Person 1
Gender = Male
Addresses =
(
{
Address Name = Home Address
Street = 123 Street St.
City = NewCity
State = AZ
Zip = 12345
Country = USA
}
)
Cars =
(
{
Make = Ford
Model = NewFord
Insured Drivers =
(
{
Name = Person 1
},
{
Name = Person 2
}
)
}
)
}
)
मैं अगर किसी और को इस समस्या का सामना करना है सोच रहा था और वे इसे कैसे उबरे।
कोई भी और सभी सुझाव आपका स्वागत है। देखने के लिए धन्यवाद।
अद्यतन 1: टिप्पणी में सलाह के अनुसार, मैं निम्नलिखित NSDictionary श्रेणी पद्धति का उपयोग करके मुद्रण के लिए JSON तार करने के लिए अपने वस्तुओं शब्दकोश पार्स करने की कोशिश की है:,
-(NSString*)JSONDescription
{
NSError *error;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error];
NSString* json = nil;
if (! jsonData) {
NSLog(@"WARNING: NSDictionary JSONDescription encountered error \"%@\"", error);
} else {
json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
return json;
}
फिर से के प्रत्येक स्तर पर मेरी पदानुक्रम, मैं प्रत्येक description
विधि में अपनी शब्दकोश ऑब्जेक्ट की JSONDescription
पर कॉल कर रहा हूं। हालांकि, ऐसा नहीं लगता है कि नेस्टेड ऑब्जेक्ट की description
विधि कहा जा रहा है। यह निम्न अपवाद उत्पन्न कर रहा है:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (Address)'
उदाहरण कार्यान्वयन
#import "Person.h"
#define NAME @"Name"
#define GENDER @"Gender"
#define ADDRESSES @"Addresses"
#define CARS @"Cars"
@implementation Person
-(NSDictionary*)toDictionary{
return @{ NAME: self.name,
GENDER: self.gender,
ADDRESSES: self.addresses,
CARS: self.cars};
}
-(NSString*)description{
return self.toDictionary.JSONDescription;
}
@end
#import "Address.h"
#define ADDRESS_NAME @"Address Name"
#define STREET @"Street"
#define CITY @"City"
#define STATE @"State"
#define ZIP @"Zip"
#define COUNTRY @"Country"
@implementation Address
-(NSDictionary*)toDictionary{
return @{ ADDRESS_NAME: self.addressName,
STREET: self.street,
CITY: self.city,
STATE: self.state,
ZIP: self.zip,
COUNTRY: self.country};
}
-(NSString*)description{
return self.toDictionary.JSONDescription;
}
@end
#import "Car.h"
#define MAKE @"Make"
#define MODEL @"Model"
#define INSURED_DRIVERS @"Insured Drivers"
@implementation Car
-(NSDictionary*)toDictionary{
return @{ MAKE: self.make,
MODEL: self.model,
INSURED_DRIVERS: self.drivers};
}
-(NSString*)description{
return self.toDictionary.JSONDescription;
}
@end
#import "Driver.h"
#define NAME @"Name"
@implementation Car
-(NSDictionary*)toDictionary{
return @{ NAME: self.name};
}
-(NSString*)description{
return self.toDictionary.JSONDescription;
}
@end
मैं थोड़ा उलझन में है क्योंकि आप कभी कभी दिखाने "कुंजी = मान" (एक शब्दकोश के रूप में) और कभी कभी हूँ।आप आउटपुट में कौन सा चाहते हैं? - और क्या आप अपना कोड दिखा सकते हैं जिसने "सर्वश्रेष्ठ प्रयास" बनाया है? –
आह हाँ। धन्यवाद। मैंने उदाहरण तय कर लिया है। बेशक मैं चाहता हूं कि वे लगातार बने रहें, या तो स्टाइल वांछित आउटपुट के लिए काम करेगा। अगर मैं बराबर या कोलन का उपयोग करता हूं तो मुझे चिंतित होने की तुलना में मैं इंडेंटेशन और न्यूलाइन प्रिंटिंग से अधिक चिंतित हूं। – Krejko
दुर्भाग्यवश, मेरे पास अब मेरे सर्वोत्तम प्रयास का कोड नहीं है, लेकिन इसमें कुछ अलग-अलग [myDescriptionString stringByReplacingOccurrencesOfString: @ "\\" withString: @ "\"] से अधिक कुछ भी शामिल नहीं है जो जोड़े गए सभी भागने वाले पात्रों को हटा दिया गया था । मैं यह नहीं समझ सका कि इंडेंटेशन में सही तरीके से कैसे जोड़ा जाए। – Krejko