2016-07-11 3 views
-2

Im, используя следующий код для создания строки json из массива.Создайте серию json-строки из nsmutablearray

for (int k = 0 ; k < [[self totalCompliancesCount] count]; k++) { 
     delayedJsonObject = [[NSMutableDictionary alloc]init]; 
     [delayedJsonObject setValue:[[self totalCompliancesCount] objectAtIndex:k] forKey:@"t"]; 
     [delayedJsonObject setValue:[[self totalCompliedCompliancesCount] objectAtIndex:k] forKey:@"y"]; 
     delayedJsonData = [NSJSONSerialization dataWithJSONObject:delayedJsonObject options:0 error:nil]; 
     delayedJsonString = [[NSString alloc] initWithBytes:[delayedJsonData bytes] length:[delayedJsonData length] encoding:NSUTF8StringEncoding]; 

    } 

[[self totalCompliancesCount] count] равно 6. поэтому delayedJsonString должен содержать 6 jsonobjects внутри него, но он содержит только последний объект JSON. Как я могу разобраться в этом?

+0

Вы создаете новый объект delayedJsonString на каждой итерации, поэтому в конце вы видите только последний итерация значение –

ответ

0

Если я получаю свой вопрос правильно, вы хотите иметь строку на основе списка объекта.

Может быть, вы можете попробовать что-то вроде этого:

NSMutableArray *delayedJsonObjectList = [NSMutableArray new]; 
for (int k = 0 ; k < [[self totalCompliancesCount] count]; k++) { 
    delayedJsonObject = [[NSMutableDictionary alloc]init]; 
    [delayedJsonObject setValue:[[self totalCompliancesCount] objectAtIndex:k] forKey:@"t"]; 
    [delayedJsonObject setValue:[[self totalCompliedCompliancesCount] objectAtIndex:k] forKey:@"y"]; 
    [delayedJsonObjectList addObject:delayedJsonObject]; 
} 
NSError *error = nil; 
NSData *delayedJsonData = [NSJSONSerialization dataWithJSONObject:delayedJsonOjbectList options:NSJSONWritingPrettyPrinted error:&error]; 
NSString *jsonString = [[NSString alloc] initWithData:delayedJsonData encoding:NSUTF8StringEncoding]; 

Просто взбитые это только сейчас не проверял еще. будет обновляться после тестирования

OUTPUT: (предполагается, что данные)

[{ "Т": 1, "у": 2}, { "Т": 1, "у": 2}, { "т ": 1," y ": 2}, {" t ": 1," y ": 2} ..]

0

Вы должны переместить эту линию вне цикла:

delayedJsonObject = [[NSMutableDictionary alloc]init]; 
+0

все еще не работает – Learner

1

Вы эффективно воссоздавать delayedJsonString каждой итерации вашего цикла, а не добавляется в конец.

Try что-то вроде:

NSMutableString *delayedJsonString = @"".mutableCopy; 
for (int k = 0 ; k < [[self totalCompliancesCount] count]; k++) { 
    delayedJsonObject = [[NSMutableDictionary alloc]init]; 
    [delayedJsonObject setValue:[[self totalCompliancesCount] objectAtIndex:k] forKey:@"t"]; 
    [delayedJsonObject setValue:[[self totalCompliedCompliancesCount] objectAtIndex:k] forKey:@"y"]; 
    delayedJsonData = [NSJSONSerialization dataWithJSONObject:delayedJsonObject options:0 error:nil]; 
    [delayedJsonString appendString:[[NSString alloc] initWithBytes:[delayedJsonData bytes] length:[delayedJsonData length] encoding:NSUTF8StringEncoding]];   
} 
+0

он работает. Вывод: '{" t ": 0," y ": 0} {" t ": 0," y ": 0} {" t ": 1," y ": 1} {" t ": 0, "y": 0} {"t": 1, "y": 1} {"t": 2, "y": 2} ', но между каждым объектом json нет запятой. Как я могу разобраться с этим? – Learner