Разобрать строку и добавить результирующие значения

Как разобрать следующую строку

{
City = "New York";
Country = "United States";
CountryCode = us;
}

и добавьте вместе значения внутри "" и оставив оставшуюся часть строки. Мне нужно получить измененную строку как "Нью-Йорк, США".

CFStringRef address = ABMultiValueCopyValueAtIndex(multiValue, identifier);

Когда я снимаю CFStringRef в NSStringЯ получаю выше зарегистрированную форму. Как я получу значения города / страны из строки

1 ответ

Если вы получаете эту строку данных (вероятно, JSON) из Интернета, вы можете обработать данные следующим образом (iOS 5):

- (void)processData:(NSData *)responseData {
        NSError* error;
        NSDictionary* json = [NSJSONSerialization 
            JSONObjectWithData:responseData
            options:kNilOptions 
            error:&error];
        NSString* city = [[json objectForKey:@"Address"] objectForKey:@"City"];
        NSString* country = [[json objectForKey:@"Address"] objectForKey:@"Country"];
        NSString* result = [city stringByAppendingFormat:@", %@",country];
        NSLog(@"%@", result); //New York, United States
    }

Вместо этого, если эта строка является словарным представлением, правильный формат должен выглядеть следующим образом:

NSString *str=@"Address = {" 
                @"City = \"New York\";"
                @"Country = \"United States\";"    
                @"CountryCode = us; };";

Так что если вы действительно хотите перейти от NSString к NSDictionary, вы можете использовать NSPropartyListSerialization следующим образом:

NSError* error;
NSData *dat=[str dataUsingEncoding:NSUTF8StringEncoding];
NSPropertyListFormat plistFormat;
NSDictionary *temp = [NSPropertyListSerialization propertyListWithData:dat options:NSPropertyListImmutable format:&plistFormat error:&error];
NSString* city = [[temp objectForKey:@"Address"] objectForKey:@"City"];
NSString* country = [[temp objectForKey:@"Address"] objectForKey:@"Country"];
NSString* result = [city stringByAppendingFormat:@", %@",country];
NSLog(@"%@",result);

РЕДАКТИРОВАТЬ (на основе вашего обновленного вопроса):

Вы разместили словарь, а не массив. Словарь состоит из набора элементов, идентифицированных по значению ключа. Массив состоит из набора элементов, идентифицированных индексом. Так что, если элементы в массиве являются строками, вам придется работать над анализом каждой строки. Как правило, это не лучший способ, как сказал @FelixKling, вы также должны работать со стандартным форматом, таким как json, xml и т. Д.

Другие вопросы по тегам