Создать строку json из NSArray
В моем приложении iPhone у меня есть список пользовательских объектов. Мне нужно создать из них строку json. Как я могу реализовать это с помощью SBJSON или iPhone sdk?
NSArray* eventsForUpload = [app.dataService.coreDataHelper fetchInstancesOf:@"Event" where:@"isForUpload" is:[NSNumber numberWithBool:YES]];
SBJsonWriter *writer = [[SBJsonWriter alloc] init];
NSString *actionLinksStr = [writer stringWithObject:eventsForUpload];
и я получаю пустой результат.
Ответы
Ответ 1
Этот процесс действительно прост, вам не нужно использовать внешние библиотеки,
Сделайте это так, (iOS 5 и выше)
NSArray *myArray;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myArray options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
Ответ 2
Мне нравятся мои категории, поэтому я делаю следующее:
@implementation NSArray (Extensions)
- (NSString*)json
{
NSString* json = nil;
NSError* error = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error];
json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return (error ? nil : json);
}
@end
Ответ 3
Хотя самый высокий голосовой ответ действителен для массива словарей или других сериализуемых объектов, он недействителен для пользовательских объектов.
Вот вам, вам нужно будет пропустить ваш массив и получить представление словаря каждого объекта и добавить его в новый массив, который будет сериализован.
NSString *offersJSONString = @"";
if(offers)
{
NSMutableArray *offersJSONArray = [NSMutableArray array];
for (Offer *offer in offers)
{
[offersJSONArray addObject:[offer dictionaryRepresentation]];
}
NSData *offersJSONData = [NSJSONSerialization dataWithJSONObject:offersJSONArray options:NSJSONWritingPrettyPrinted error:&error];
offersJSONString = [[NSString alloc] initWithData:offersJSONData encoding:NSUTF8StringEncoding] ;
}
Что касается метода dictionaryRepresentation в классе Offer:
- (NSDictionary *)dictionaryRepresentation
{
NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
[mutableDict setValue:self.title forKey:@"title"];
return [NSDictionary dictionaryWithDictionary:mutableDict];
}
Ответ 4
Попробуйте этот Swift 2.3
let consArray = [1,2,3,4,5,6]
var jsonString : String = ""
do
{
if let postData : NSData = try NSJSONSerialization.dataWithJSONObject(consArray, options: NSJSONWritingOptions.PrettyPrinted)
{
jsonString = NSString(data: postData, encoding: NSUTF8StringEncoding)! as String
}
}
catch
{
print(error)
}
Ответ 5
Попробуйте это,
- (NSString *)JSONRepresentation {
SBJsonWriter *jsonWriter = [SBJsonWriter new];
NSString *json = [jsonWriter stringWithObject:self];
if (!json)
[jsonWriter release];
return json;
}
тогда назовите это,
NSString *jsonString = [array JSONRepresentation];
Надеюсь, это поможет вам...
Ответ 6
Я немного опаздываю на эту вечеринку, но вы можете сериализовать массив настраиваемых объектов, внедряя метод -proxyForJson
в свои пользовательские объекты. (Или в категории на пользовательских объектах.)
Для пример.