2013-08-21 2 views
0

Я пытаюсь отправить массив словарей, но он не прошел проверку. Ниже приведен пример вывода:JSON не проверяет

{ 
     album = "Karaoke - In the style of Goo Goo Dolls - Vol. 2"; 
     artist = "Stingray Music (Karaoke)"; 
     length = "208.404"; 
     title = "Better Days (Karaoke Version)"; 
    }, 
     { 
     album = Down; 
     artist = "Jay Sean"; 
     length = "212.61"; 
     title = Down; 
    }, 
     { 
     album = "Growing Pains"; 
     artist = "Mary J Blige"; 
     length = "301.844"; 
     title = "Come to Me (Peace)"; 
    } 

Вот код генерируя его:

NSMutableArray *mutableSongsToSerialize = [NSMutableArray array]; 
NSArray *songs = [playlist items];    
for (MPMediaItem *song in songs){ 
     NSString *title =[song valueForProperty: MPMediaItemPropertyTitle]; 
     NSString *artist =[song valueForProperty: MPMediaItemPropertyAlbumArtist]; 
     NSString *album =[song valueForProperty: MPMediaItemPropertyAlbumTitle]; 
     NSString *length =[song valueForProperty: MPMediaItemPropertyPlaybackDuration]; 
     NSDictionary *songDictionary = @{@"title": title, @"artist": artist, @"album":album, @"length":length}; 
     [mutableSongsToSerialize addObject:songDictionary]; 
} 
NSString *jsonRepresentation = [NSJSONSerialization JSONOBjectWithData:mutableSongsToSerialize options:0 error:NULL]; 

Я думаю, что эта строка должна быть изменена как-то так, что каждая песня не рассматривается в качестве корневого элемента, но я не уверен, что делать конкретно.

NSDictionary * songDictionary = @ {@ "Название": название, @ "художника": художник, @ "альбом": альбом, @ "длина": длина};

+0

«Я думаю, что эта строка должна быть модифицирована как-то не так много, как каждый корень, но я не уверен, что делать конкретно». что это значит? –

+0

Также вы должны обратиться к моему более раннему ответу - используйте dataWith ... Метод для сериализации, вы пытаетесь десериализировать то, что не является сериализованным JSON –

+0

@CarlVeazey - я использовал функцию JSONOBjectWithData, чтобы я мог видеть, как будет выглядеть вывод , в конце концов я хочу отправить его в веб-сервис. Я также отредактировал свою типографию выше - я думаю, проблема в том, что каждая песня рассматривается как корневой элемент. Если я сохраню это происхождение –

ответ

2

Вы не используете правильный метод для сериализации JSON. Вам нужно использовать +[NSJSONSerialization dataWithJSONObject:options:error].

Вот пример, который использует ту же структуру, как у вас, но с жесткими кодированными значениями:

NSDictionary *song1 = @{@"title": @"title1", @"artist": @"artist1", @"album":@"album1", @"length":@"length1"}; 
NSDictionary *song2 = @{@"title": @"title2", @"artist": @"artist2", @"album":@"album2", @"length":@"length2"}; 
NSDictionary *song3 = @{@"title": @"title3", @"artist": @"artist3", @"album":@"album3", @"length":@"length3"}; 
NSArray *songs = @[song1, song2, song3]; 
NSError *error = nil; 
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:songs options:NSJSONWritingPrettyPrinted error:&error]; 
NSString *JSONDataAsString = [[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding]; 
NSLog(@"JSON String = %@",JSONDataAsString); 
NSLog(@"error was %@",error); 

Выход выглядит так:

JSON String = [ 
    { 
    "title" : "title1", 
    "album" : "album1", 
    "length" : "length1", 
    "artist" : "artist1" 
    }, 
    { 
    "title" : "title2", 
    "album" : "album2", 
    "length" : "length2", 
    "artist" : "artist2" 
    }, 
    { 
    "title" : "title3", 
    "album" : "album3", 
    "length" : "length3", 
    "artist" : "artist3" 
    } 
] 

Если вы не хотите, чтобы добавить Objective-C код, чтобы увидеть вывод строки, вы можете попробовать следующее: lldb

expr (NSString *) [[NSString alloc] initWithData:JSONData encoding:4] 

4 используется вместо NSUTF8StringEncoding из-за проблем с видимостью с отладчиком.

+0

Еще раз спасибо за ответ, я вижу правильный способ просмотра результатов, перечисленных в вашем сообщении, я преобразовал его в строку все неправильно. –

+0

Вы видите, как я создал строковое представление данных? Это то, о чем вы спрашиваете? Или что-то другое? –

+0

Да, это именно то, что я искал, как правильно посмотреть строку. Спасибо, что помогли мне дважды, а также помогли мне понять, ПОЧЕМУ я был не в порядке. –

2

Ваш JSON является недействительным, вы должны поставить : вместо = и , вместо ;, не забудьте опустить последнюю '. Кроме того, хэш-ключи должны быть указаны:

{ 
    "album": "Karaoke - In the style of Goo Goo Dolls - Vol. 2", 
    "artist": "Stingray Music (Karaoke)", 
    "length": "208.404", 
    "title": "Better Days (Karaoke Version)" 
}, 
... 

Также вы можете использовать JSON lint проверить JSONs.

Смежные вопросы