Подтвердить что ты не робот

Создать строку 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];

и я получаю пустой результат.

4b9b3361

Ответ 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 в свои пользовательские объекты. (Или в категории на пользовательских объектах.)

Для пример.