2014-01-13 1 views
0

Я извлекаемых данные из JSON веб-службы и сохранили его в следующий массив _soldamount = ( 0, 0, 0, 0, "62,69", " 48,3" , 81, "59,83", "162,57", 0, "40,67", ) Я считаю, что этот массив сохраняется в виде строки. как я могу преобразовать этот массив в массив NSnumbers? Спасибо за помощь!Преобразование JSON ARRAY в NSNumber Массивы

+0

Возможно, вам следует показать данные JSON. –

+0

@MartinR - Нет необходимости. T данные JSON: «[» 0 »,« 0 »,« 0 »,« 0 »,« 62.69 »,« 48.3 »,« 81 »,« 59.83 »,« 162.57 »,« 0 »,« 40.67 ». ..] '. –

+0

Простейшее решение, вероятно, состояло бы в том, чтобы перебирать ваш массив и преобразовывать каждый элемент из NSString в NSNumber с помощью [NSNumber numberWithFloat: element.floatValue]; – Chris

ответ

0

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

NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
NSError *e = nil; 
id json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&e]; 

Что хранится в переменной json будет зависеть от данных в формате JSON. Обычно это либо NSDictionary, либо NSArray, и похоже, что у вас будет NSArray.

+1

Это не решает проблему OP - данные в результате NSArray будет строками, а не NSNumbers. –

+0

Я не согласен. Он может вытащить любой из них, независимо от того, хранится ли он как «NSNumber» или «NSString», как double, вызывая метод '-doubleValue', на который будет отвечать« NSNumber »или« NSString ». Во всяком случае, это была бы конечная цель, если бы вы хотели получить доступ к своим значениям, поэтому не имеет значения, правильно ли JSON возвращает их как числа или нет. – Gavin

+0

ОП запросил массив NSNumbers. –

1
NSArray *_soldamount = @[ @0, @0, @0, @0, @"62.69", @"48.3", @81, @"59.83", @"162.57", @0, @"40.67"]; 
NSArray *numbers = [_soldamount valueForKey:@"doubleValue"]; 

создает массив из NSNumber s. Исходный массив может содержать NSNumber или NSString объектов.

+0

Я думаю, он хочет получить эти значения от JSON, а не жестко. – Gavin

+0

@Gavin: Это было просто как пример того, как преобразовать массив строк в массив чисел. Конечно, может быть, я неправильно понял проблему. –

+0

Вы преобразовываете дробные числа в целые числа. –

-2

использование [NSNumber numberWithInteger: [строка integerValue]]

+0

Это не позволяет решить вопрос. – Gavin

+0

Это нечто вроде правильного, хотя оно снова делает ошибку целых чисел дробных данных. –

+0

Нет, у него есть строка, содержащая блок JSON, который состоит из массива со значениями в нем. Этот код ничего не сделал бы с этим. Я думаю, что вызов 'integerValue' в массиве вернет' 0', потому что он сразу же встретит нечисловые значения в строке. Поэтому у него будет 'NSNumber', содержащий номер' 0'. – Gavin

0

Если эти значения предназначены для хранения как числа, ваш веб-сервис должен быть возвращение их в качестве таковых. Другими словами, значение с кавычками (") вокруг него является строкой, независимо от того, является ли строка числовой.

Если у вас нет контроля над веб-службой и вы хотите сохранить эти значения в виде NSNumbers, вы можете использовать [NSNumber numberWithFloat:[string floatValue]] или вы можете использовать [string doubleValue], если строки могут содержать большие значения или значение высокой точности с плавающей запятой.

ответ знакомства Гэвины о том, как использовать класс NSJSONSerialization, если вы не используете его уже.

0
NSError *error; 
NSDictionary *json = [NSJSONSerialization 
    JSONObjectWithData:responseData 
    options:kNilOptions 
    error:&error]; 
NSArray *soldAmount = [json objectForKey:@"amount"]; // Your array of strings. 
// Convert string array to number array 
NSMutableArray *numberArray = [NSMutableArray array]; 
[soldAmount enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    [numberArray addObject:[NSNumber numberWithFloat:[(NSString *)obj floatValue]]]; 
}];