2015-11-03 3 views
0

Мой APP получает строку JSON из строки api JSON string содержит объектов и массив в нем. Это то, что я сделал до сих пор, но я не мог получить от него значения. советы мне, пожалуйста, и я новичок в IOS .Это мой JSON Строка:JSON String с массивами iOS

{ 
    "Id":"0d95a9f6-c763-4a31-ac6c-e22be9832c83", 
    "Name":"john", 
    "ProjectName":"project1", 
    "StartDate":"\/Date(1447200000000)\/", 
    "Documents":   
    [{ 
     "Id":"2222a","Name":"book1","ContentType":"application/pdf" 
    }, 
    { 
     "Id":"3718e","Name":"Toolbox","ContentType":"application/fillform" 
    }] 
} 

Код

NSString *URLString = [NSString stringWithFormat:@"http://mysite/API/Assignments?"]; 
NSURL *url = [NSURL URLWithString:URLString]; 
NSData *data=[NSData dataWithContentsOfURL:url]; 
json=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 

assignArray=[[NSMutableArray alloc]init]; 

for (int i=0; i<json.count; i++) { 
    NSString *aID=[[json objectAtIndex:i]objectForKey:@"Id"]; 
    NSString *uName=[[json objectAtIndex:i]objectForKey:@"Name"]; 
    NSString *pName=[[json objectAtIndex:i]objectForKey:@"ProjectName"]; 

    //[self initwithUserID:uID userName:uName proName:pName]; 
    // [self retrieveAssignmentDetails:aID]; 
    AssignmentsJson *assignment=[[AssignmentsJson alloc]initwithassignID:aID userName:uName proName:pName]; 
    [assignArray addObject:assignment]; 
+2

Я думаю, что вы получили словарю не массив ... так просто попробовать '[JSon objectForKey: @ "Id"];' –

+1

Примечание стороны, вы не должны использовать '[NSData dataWithContentsOfURL: URL]' в получить данные из сетевого ресурса. Он заблокирует графический интерфейс. –

+0

Правильно :) спасибо – Nan

ответ

4

ваш json не массив, так как разобрать следующий

NSString *aID = json[@"Id"]; 
NSString *uName = json[@"Name"]; 
NSString *pName = json[@"ProjectName"]; 
NSString *startDate = json[@"StartDate"]; 

NSArray *documents = json[@"Documents"]; 
for (NSDictionary *item in documents) { 
    NSString *itemID = item[@"Id"]; 
    NSString *itemName = item[@"Name"]; 
    NSString *itemContentType = item[@"ContentType"]; 
} 
+0

Большое спасибо. Работает отлично! – Nan

0

Ваш Json Объект - NSDictionary. так что вы можете непосредственно получить данные с помощью valueForKey

NSDictionary *json=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 
NSString *aID = json[@"Id"]; 
NSString *uName = json[@"Name"]; 
NSString *pName = json[@"ProjectName"]; 

для Id, Name и ContentType находится внутри объекта массива в пределах вашего NSDictionary объекта.

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

NSArray *arr = json[@"Documents"]; 
for (int i=0; i<arr.count; i++) { 
    NSString *aID=[[arr objectAtIndex:i]objectForKey:@"Id"]; 
    NSString *uName=[[arr objectAtIndex:i]objectForKey:@"Name"]; 
    NSString *cType=[[arr objectAtIndex:i]objectForKey:@"ContentType"]; 
} 

Вы должны научиться NSArrayNSDictionary и структура первого. это поможет вам в будущем. Надеюсь, что это поможет вам.

+0

Большое спасибо. Работает отлично! – Nan

0

вы можете сделать это следующим образом.

Ваш Json находится в NSDictionary формате.

NSData * data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://mysite/API/Assignments?"]]; 
    NSDictionary * dicResponse = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 


    if(dicResponse){ 
     NSString * strID = [dicResponse valueForKey:@"Id"]; 
     NSString * strName = [dicResponse valueForKey:@"Name"]; 
     NSString * strProjectName = [dicResponse valueForKey:@"ProjectName"]; 
     NSString * strDate = [dicResponse valueForKey:@"StartDate"]; 
     NSArray * arrDocuments = [NSArray arrayWithArray:[dicResponse valueForKey:@"Documents"]]; 

     for (int i=0; i< arrDocuments.count; i++) { 

      NSString * ID=[[arrDocuments objectAtIndex:i]valueForKey:@"Id"]; 
      NSString * Name=[[arrDocuments objectAtIndex:i]valueForKey:@"Name"]; 
      NSString * Type=[[arrDocuments objectAtIndex:i]valueForKey:@"ContentType"]; 
     } 

    } 
+0

Спасибо намного лучше :) – Nan

Смежные вопросы