Bir hiyerarşide birden çok sözlükte kaydettiğim nesnelleştirilmiş bir JSON yapısını yazdırmaya çalışıyorum. Bunu NSObject'in description
yöntemiyle yapmak istiyorum, böylece her bir iç içe sözlük'ün açıklama yöntemi de değerini döndürmeye çağırılıyor.İç içe NSDictionary Açıklama Kaçış Karakter Sorunları
İstenilen Sonucu Ancak
//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
, ben her iç içe sözlük için dönüş dize dönüş dize geçirilir alır hiyerarşi her seviye için bir kez kaçtı oluyor dair bir sorunla çalışan edilmiştir. Bu açıklama nedeniyle bile sistem uygulaması gibi bir şey kullanarak bu kaçış karakterleri ekler nasıl bir ilgisi olduğunu okudum
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)
Fiili Sonucu, ancak ben arzu işlevselliği kullanılabilir inanıyoruz NSArray'ın içeriğini nasıl istediğim gibi açıkladığından dolayı. Sonuç dizesinde yinelemeyi ve kaçış karakterlerini ayrıştırmayı denedim ancak şu ana kadar ortaya koyduğum en iyi sonuç, tüm sözlüklerdeki tüm özelliklerin hiyerarşik olmayan bir listesidir.
Ben başkasının bu soruna rastlamak eğer merak buna nasıl üstesinden edildi
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
}
)
}
)
}
)
En girişimi.
Her türlü öneri hoş geldiniz. Baktığınız için teşekkür ederiz.
GÜNCELLEME 1: Açıklamalarda tavsiye gereğince , şu NSDictionary kategori yöntemi kullanarak baskı için JSON dizeleri benim Sözlük nesneleri ayrıştırma denedi: bir her düzeyinde,
-(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;
}
Sonra benim hiyerarşi, her description
yönteminde sözlük nesnesinin JSONDescription
aramasını yapıyorum. Ancak, yuvalanmış nesnenin description
yönteminin çağrıldığı görünmüyor. Bu aşağıdaki istisna neden olan:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (Address)'
Örnek Uygulama
#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
ben bazen (sözlükten gibi) "key = value" ve bazen de gösterdiği için biraz karıştı.Çıktıda hangisini istiyorsunuz? - Ve "en iyi girişimi" üreten kodunuzu gösterebilir misiniz? –
Ah evet. Teşekkürler. Örneği düzelttim. Elbette ister istemez, ister istemez çıktısını almak isterim. Yeni satırların girintilemesine ve yazdırılmasına, eşittir veya iki nokta üst üste yazıyorsa, endişelendiğimden daha fazla endişeleniyorum. – Krejko
Ne yazık ki, artık kod benim en iyi denemeye sahip değil ama birkaç farklı [myDescriptionString stringByReplacingOccurrencesOfString: @ "\\" withString: @ "\"] ve eklenen tüm kaçan karakterleri kaldı. . Girintiye nasıl düzgün bir şekilde ekleneceğini anlayamadım. – Krejko