2015-11-03 121 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