2013-05-22 64 views
0

正在使用Objective C的,這裏是我的問題..從目標C中的json對象獲取值?

{ 
    "STATUS":"OK", 
    "projects": 
    [ 

    { 

     "company": 
     { 
      "name":"ABC Pvt Ltd.","id":"12345" 
     }, 
     "created-on":"2012-07-07T04:29:29Z", 
     "category": 
     { 
      "name":"", 
      "id":"" 
     }, 
     "starred":false, 
     "name":"MY Platform 1", 
     "startDate":"", 
     "logo":"abc.png","notifyeveryone":false, 
     "id":"70596", 
     "last-changed-on":"2013-05-20T12:22:11Z", 
     "status":"active", 
     "endDate":"" 

    }, 

    { 
     "company":{ 
        "name":"ABC Pvt Ltd.", 
        "id":"31222" 
        }, 
     "created-on":"2012-05-22T07:06:30Z", 
     "category":{ 
        "name":"","id":"" 
        }, 
     "starred":false, 
     "name":"Miscellaneous 1", 
     "startDate":"", 
     "logo":"abc.png", 
     "notifyeveryone":false, 
     "id":"12345", 
     "last-changed-on":"2013-05-20T12:19:45Z", 
     "status":"active", 
     "endDate":"" 
    } 
    ] 
    } 

以上是我的JSON字符串是從asihttpRequest

檢索

現在我要顯示的項目名稱eg.MY平臺1和其他1

我剛剛拿到的項目陣列以下幾點:

NSDictionary* json = [NSJSONSerialization 
          JSONObjectWithData:data //1 

          options:kNilOptions 
          error:&error]; 



    ProjectDetailsarray = [json objectForKey:"projects"]; 

現在任何人都可以讓我知道如何IG等項目的名稱,正如我上面在我的表格視圖中提到的兩行。

首先是我的平臺1 和第二個是雜1

我新的目標C,所以我試圖解決了,但ddint找到一種方式來獲得該項目的名稱?

+1

所有的答案可以在這裏是不通用的,容易出錯。檢查正確的方法[這裏](http://stackoverflow.com/questions/14958883/ios-serialize-deserialize-complex-json-generically-from-nsobject-class/16771574#16771574) –

+0

謝謝...我會檢查它 –

回答

4

簡單,循環陣列上:

for (NSDictionary *project in json[@"projects"]) { 
    NSLog(@"Project name: %@", project[@"name"]); 
} 

注意我用的,而不是[json objectForKey:@"projects"]下標符號,這更短。

0

你有json中的項目數組。該數組包含字典。

所以基本上首先你需要從數組中獲得字典,然後你可以從字典中獲得價值。

這樣的..

NSArray *projects = [json objectForKey:@"projects"]; 
for(NSDictionary *dict in projects) 
    NSLog(@"Project Name: %@",[dict objectForKey:@"name"]); 
+0

爲什麼混合-objectForKey和-valueForKey:?通常,您希望-objectForKey: –

2

你有字典的數組。 如何從字典中獲得價值,你應該知道:

NSDictionary *dic = @{@"Name": @"Andrew", 
         @"Surname": @"Kama", 
         @"Age": @24, 
         @"Friends":@[@"Lesly", @"John", @"Carter"]}; 

NSString *name = dic[@"Name"]; 

要獲得第二個朋友的名字:

NSArray *friends = dic[@"Friends"]; 
NSString *secondFriend = friends[1]; // or dic[@"Friends"][1]; 

等。

您可以將JSON視爲嵌套的NSDictionaries/NSArrays。

遍歷項目:

NSArray *projects = json[@"projects"]; 
for (NSDictionary *project in projects) { 
    NSLog(@"Project name: %@", project[@"name"]); 

    // how to get company name? 
    // project[@"company"][@"name"]; 
    // etc 
} 
0

這很簡單。剛剛從你數組提取這樣的值:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    } 

    cell.textLabel.text = [[ProjectDetailsarray objectAtIndex:indexPath.row] objectForKey:@"name"]; 
} 
+0

'objectForKey',而不是'valueForKey'。但是你真的應該使用下標符號。 – Cyrille

1

的項目是一個數組,你可以枚舉數組如下

__block NSMutableArray *projectNameArray=[[NSMutableArray alloc] init]; 
NSArray *projects = [json objectForKey:@"projects"]; 

[projects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    NSLog(@"project %i %@",idx,[obj valueForKey:@"name"]); 
    [projectNameArray addObject:[obj valueForKey:@"name"]]; 
}]; 

NSLog(@"project name array is %@",projectNameArray); 
1

您可以使用Key-Value Coding得到陣列通過其鍵獲取出局項目名稱項目名稱與此代碼:

NSArray *projectsNames = [json valueForKeyPath:@"projects.name"]; 

此示例代碼:

NSArray *projectsNames = [json valueForKeyPath:@"projects.name"]; 
NSLog(@"Projects names: %@", projectsNames); 

給出了這樣的輸出:

Projects names: (
    "MY Platform 1", 
    "Miscellaneous 1" 
) 

你可以在這裏文檔大約鍵 - 值編碼的更多信息:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html