如何解析JSON响应?

时间:2012-08-01 05:05:06

标签: iphone objective-c ios json

我正在开展一个必须展示Facebook好友列表的项目。我做了所有必要的编码以获得响应,但响应如下:

 {"data":[{"name":"Ramprasad Santhanam","id":"586416887"},{"name":"Karthik Bhupathy","id":"596843887"},{"name":"Anyembe Chris","id":"647842280"},{"name":"Giri Prasath","id":"647904394"},{"name":"Sadeeshkumar Sengottaiyan","id":"648524395"},{"name":"Thirunavukkarasu Sadaiyappan","id":"648549825"},{"name":"Jeethendra Kumar","id":"650004234"},{"name":"Chandra Sekhar","id":"652259595"}

任何人都可以告诉我如何在两个不同的数组中保存名称和ID。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

你可以在下面看到html响应如何解析。在那里我得到了facebook的朋友。

- (void)fbGraphCallback:(id)sender 

    {

    if ( (fbGraph.accessToken == nil) || ([fbGraph.accessToken length] == 0) )


 {

            //restart the authentication process.....
    [fbGraph authenticateUserWithCallbackObject:self andSelector:@selector(fbGraphCallback:) 
                         andExtendedPermissions:@"user_photos,user_videos,publish_stream,offline_access,user_checkins,friends_checkins"];

} 
else 

{

    NSLog(@"------------>CONGRATULATIONS<------------, You're logged into Facebook...  Your oAuth token is:  %@", fbGraph.accessToken);
    FbGraphResponse *fb_graph_response = [fbGraph doGraphGet:@"me/friends" withGetVars:nil];// me/feed 
    //parse our json
    SBJSON *parser = [[SBJSON alloc] init];
    NSDictionary *   facebook_response = [parser objectWithString:fb_graph_response.htmlResponse error:nil]; 
    //init array 
    NSMutableArray * feed = (NSMutableArray *) [facebook_response objectForKey:@"data"];
    //  NSMutableArray *recentFriends = [[NSMutableArray alloc] init];
     arr=[[NSMutableArray alloc]init];
    //adding values to array
    for (NSDictionary *d in feed) 
    {
        [arr addObject:d];


    }

    //NSLog(@"array is %@ ",arr);
    [fbSpinner stopAnimating];
    [fbSpinner removeFromSuperview];

    [myTableView reloadData];


}

}

答案 1 :(得分:2)

这是你得到的json回应。因此,您需要一个JSON解析器将此字符串转换为Objective-C对象。在iOS App中,您可以使用json-framework之类的库。这个库将允许您轻松地解析JSON并从字典/数组生成json(这实际上是所有JSON的组成)。

来自SBJson docs:在JSON解析之后,您将获得此转换

  

JSON以下列方式映射到Objective-C类型:

     
      
  • null - &gt; NSNull
  •   
  • string - &gt;的NSString
  •   
  • 数组 - &gt;的NSMutableArray
  •   
  • 对象 - &gt;的NSMutableDictionary
  •   
  • true - &gt; NSNumber的-numberWithBool:是
  •   
  • false - &gt; NSNumber的-numberWithBool:否
  •   
  • 最多19位数的整数 - &gt; NSNumber的-numberWithLongLong:
  •   
  • 所有其他数字 - &gt; NSDecimalNumber
  •   

答案 2 :(得分:2)

看起来像JSON,而不是HTML。 (您可能已经知道这一点,因为我用json标记了问题。)

我不确定为什么其他人会建议第三方库来执行此操作,除非您需要支持相当旧的操作系统版本。只需使用Apple内置的NSJSONSerialization 类。

答案 3 :(得分:1)

这不是HTML。这是JSON。你需要一个JSON parser

JSON解析器通常会从字符串中生成NSDictionary或NSArray。通过我的实现,您可以执行以下操作:

NSMutableArray *names = [NSMutableArray array];
NSMutableArray *ids = [NSMutableArray array];

NSDictionary *root = [responseString parseJson];
NSArray *data = [root objectForKey:@"data"];
for (NSDictionary *pair in data)
{
    [names addObject:[pair objectForKey:@"name"]];
    [ids addObject:[pair objectForKey/@"id"]];
}

iOS的最新版本包含一个新的基础类NSJSONSerialization,它将为您处理任何JSON解析和序列化。