2015-11-03 54 views
0

我的APP從api調用中獲取JSON字符串JSON字符串有對象數組。這是我迄今爲止所做的,但我無法從中獲得價值。指點我,請和我是新來的iOS。這是我的JSON字符串:帶數組的JSON字符串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]'來從網絡資源獲取數據。它會阻止GUI。 –

+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"]; 

IdNameContentType你的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

你可以通過以下方式做到這一點。您的JsonNSDictionary格式。

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