Преобразование NSArray словарей в массив JSON в iOS
Мне нужно отправить NSArray
на сервер в формате массива JSON
. Как преобразовать его в JSON
. Это образец моего NSArray
, который должен пройти.
array([0] => array('latitude'=>'10.010490',
'longitude'=>'76.360779',
'altitude'=>'30.833334',
'timestamp'=>'11:17:23',
'speed'=>'0.00',
'distance'=>'0.00');
[1] => array('latitude'=>'10.010688',
'longitude'=>'76.361378',
'altitude'=>'28.546305',
'timestamp'=>'11:19:26',
'speed'=>'1.614',
'distance'=>'198.525711')
)`
и требуемый формат выглядит следующим образом
[
{ "latitude":"10.010490",
"longitude":"76.360779",
"altitude":"30.833334",
"timestamp":"11:17:23",
"speed":"0.00",
"distance":"0.00"
},
{
"latitude":"10.010688",
"longitude":"76.361378",
"altitude":"28.546305",
"timestamp":"11:19:26",
"speed":"1.614",
"distance":"198.525711"
}
]
У кого-нибудь есть решение? Спасибо заранее.
Ответы
Ответ 1
NSDictionary *firstJsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"10.010490", @"latitude",
@"76.360779", @"longitude",
@"30.833334", @"altitude",
@"11:17:23", @"timestamp",
@"0.00", @"speed",
@"0.00", @"distance",
nil];
NSDictionary *secondJsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"10.010490", @"latitude",
@"76.360779", @"longitude",
@"30.833334", @"altitude",
@"11:17:23", @"timestamp",
@"0.00", @"speed",
@"0.00", @"distance",
nil];
NSMutableArray * arr = [[NSMutableArray alloc] init];
[arr addObject:firstJsonDictionary];
[arr addObject:secondJsonDictionary];
NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];
NSLog(@"jsonData as string:\n%@", jsonString);
Ответ 2
Я бы рекомендовал SBJson-Framework.
Преобразование NSMutableArray
выполняется так же просто, как NSString *jsonString = [yourArray JSONRepresentation];
Изменить: Джек Фарнандиш прав, вам нужно преобразовать его в NSDictionary, прежде чем вы сможете преобразовать его в Json. В моем примере NSMutableArray должен содержать словарь. Массив нужен только для создания квадратных скобок в начале и в конце строки.
Ответ 3
Самый простой и лучший подход!
Чтобы преобразовать NSArray или NSMutableArray в jsonString, вы можете сначала преобразовать его в NSData, а затем преобразовать в NSString. Используйте этот код
NSData* data = [ NSJSONSerialization dataWithJSONObject:yourArray options:NSJSONWritingPrettyPrinted error:nil ];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
Это помогло мне и надеюсь, что это поможет вам. Всего наилучшего.
Ответ 4
Вы можете использовать встроить функции JSON в iOS или использовать внешний lib, например. JSONKit для преобразования ваших данных в JSON
Ответ 5
Сначала вы должны изменить структуру в класс NSDictionary
и NSArray
, содержащий объекты NSDictionary
, а затем попробовать JSONKit в сериализации iOS 5 лучше, чем стандартный NSJSONSerialization
.
Ответ 6
#import <JSONKit/JSON.h>
NSArray *array = // Your array here.
NSString *json = [array JSONString];
NSLog(@"%@", json);
JSONKit работает значительно лучше SBJson и другие в моих собственных и авторских тестах.
Ответ 7
Отметьте этот учебник, JSON в iOS 5.0 был четко объяснен (serailization, deserailization).
Ответ 8
Является ли служба, вызывающая службу RESTful?
Если это так, я настоятельно рекомендую использовать RestKit. Он выполняет сериализацию/десериализацию объектов. Он также поддерживает все сетевые подкрепления. Очень ценный и ухоженный.