Я извлекаемых данные из JSON веб-службы и сохранили его в следующий массив _soldamount = ( 0, 0, 0, 0, "62,69", " 48,3" , 81, "59,83", "162,57", 0, "40,67", ) Я считаю, что этот массив сохраняется в виде строки. как я могу преобразовать этот массив в массив NSnumbers? Спасибо за помощь!Преобразование JSON ARRAY в NSNumber Массивы
ответ
Вы можете сделать это, используя следующий код:
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *e = nil;
id json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&e];
Что хранится в переменной json
будет зависеть от данных в формате JSON. Обычно это либо NSDictionary
, либо NSArray
, и похоже, что у вас будет NSArray
.
Это не решает проблему OP - данные в результате NSArray будет строками, а не NSNumbers. –
Я не согласен. Он может вытащить любой из них, независимо от того, хранится ли он как «NSNumber» или «NSString», как double, вызывая метод '-doubleValue', на который будет отвечать« NSNumber »или« NSString ». Во всяком случае, это была бы конечная цель, если бы вы хотели получить доступ к своим значениям, поэтому не имеет значения, правильно ли JSON возвращает их как числа или нет. – Gavin
ОП запросил массив NSNumbers. –
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
объектов.
Я думаю, он хочет получить эти значения от JSON, а не жестко. – Gavin
@Gavin: Это было просто как пример того, как преобразовать массив строк в массив чисел. Конечно, может быть, я неправильно понял проблему. –
Вы преобразовываете дробные числа в целые числа. –
использование [NSNumber numberWithInteger: [строка integerValue]]
Это не позволяет решить вопрос. – Gavin
Это нечто вроде правильного, хотя оно снова делает ошибку целых чисел дробных данных. –
Нет, у него есть строка, содержащая блок JSON, который состоит из массива со значениями в нем. Этот код ничего не сделал бы с этим. Я думаю, что вызов 'integerValue' в массиве вернет' 0', потому что он сразу же встретит нечисловые значения в строке. Поэтому у него будет 'NSNumber', содержащий номер' 0'. – Gavin
Если эти значения предназначены для хранения как числа, ваш веб-сервис должен быть возвращение их в качестве таковых. Другими словами, значение с кавычками (") вокруг него является строкой, независимо от того, является ли строка числовой.
Если у вас нет контроля над веб-службой и вы хотите сохранить эти значения в виде NSNumbers, вы можете использовать [NSNumber numberWithFloat:[string floatValue]]
или вы можете использовать [string doubleValue]
, если строки могут содержать большие значения или значение высокой точности с плавающей запятой.
ответ знакомства Гэвины о том, как использовать класс NSJSONSerialization, если вы не используете его уже.
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]]];
}];
Возможно, вам следует показать данные JSON. –
@MartinR - Нет необходимости. T данные JSON: «[» 0 »,« 0 »,« 0 »,« 0 »,« 62.69 »,« 48.3 »,« 81 »,« 59.83 »,« 162.57 »,« 0 »,« 40.67 ». ..] '. –
Простейшее решение, вероятно, состояло бы в том, чтобы перебирать ваш массив и преобразовывать каждый элемент из NSString в NSNumber с помощью [NSNumber numberWithFloat: element.floatValue]; – Chris