【问题标题】:Issue in JSON parser in iPhone? [closed]iPhone中JSON解析器的问题? [关闭]
【发布时间】:2013-01-11 12:18:39
【问题描述】:

JSON 响应如 - {"response":{"Success":"Y","items":[{"userid":"255"}]}}

我尝试这样解析:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    NSString *jsonStr = [[NSString alloc] initWithData:mutaebleData encoding:NSUTF8StringEncoding];
    NSLog(@"JSonSTr : %@", jsonStr);
    
    SBJSON *json = [[SBJSON alloc]init];
    
    NSDictionary *dic = (NSDictionary *) [json objectWithString:jsonStr];
    NSDictionary *dic1 = (NSDictionary *) [dic objectForKey:@"response"];
    NSDictionary *dic2 = (NSDictionary *) [dic1 objectForKey:@"Success"];
    NSDictionary *dic3 = (NSDictionary *) [dic1 objectForKey:@"items"];

    NSDictionary *dic4 = (NSDictionary *) [dic3 objectForKey:@"userid"]; // App crash in this line
}

如何获取userid值?

【问题讨论】:

  • 从错误看来 dic3 是一个数组而不是字典。你能 NSLog dic3 的类并检查一下吗?
  • 查看您的 JSON - "items" 键与数组相关联,而不是字典。
  • 这与您的问题无关,但请删除所有难看的演员表。它们在 Objective-C 中通常不是必需的,而且通常只是隐藏错误。

标签: iphone ios json parsing sbjson


【解决方案1】:

这就是问题所在:

 NSDictionary *dic4 = (NSDictionary *) [dic3 objectForKey:@"userid"];

你应该使用:

NSDictionary *dic4 = (NSDictionary *) [[dic3 objectAtIndex:0] objectForKey:@"userid"];

【讨论】:

  • 真正的问题是NSDictionary *dic3 = (NSDictionary *) [dic1 objectForKey:@"items"];,因为“items”键被映射到一个数组。应该是NSArray *items = (NSArray *)[dic1 objectForKey:@"items"];
  • 我试过了,但错误出现在“没有可见的@interface for nsdictionary 声明选择器 objectatindex”
  • 改变这个:NSDictionary *dic3 = (NSDictionary *) [dic1 objectForKey:@"items"];转化为:NSArray *dic3 = (NSArray *) [dic1 objectForKey:@"items"];
【解决方案2】:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

NSString *jsonStr = [[NSString alloc] initWithData:mutaebleData encoding:NSUTF8StringEncoding];
NSLog(@"JSonSTr : %@", jsonStr);

SBJSON *json = [[SBJSON alloc]init];

NSDictionary *dic = (NSDictionary *) [json objectWithString:jsonStr];
NSDictionary *dic1 = (NSDictionary *) [dic objectForKey:@"response"];
NSDictionary *dic2 = (NSDictionary *) [dic1 objectForKey:@"Success"];
NSArray *arr3 = (NSArray *) [dic1 objectForKey:@"items"];

NSString *str = [[arr objectAtIndex:0]objectForKey:@"userid"];
NSlog(@"userid ==%@",str);
// NSDictionary *dic4 = (NSDictionary *) [dic3 objectForKey:@"userid"]; // App crash in this line
 }

【讨论】:

  • 我试过了,但错误出现在 nslog - 架构 i386 的未定义符号:“_NSlog”,引用自:
  • 而不是 NSlog 类型 NSLog....它将解决您的 pblm 并接受答案是正确的
  • 我得到了答案,请看上面
【解决方案3】:

您可以添加 SBJSON 框架文件。并通过解析by

NSDictionary *responseDict = [response JSONValue];
just parse it as normal dictionary.

NSString *userIDValue=[NSString stringWithFormat:@"%@",[[[[responseDict valueForKey:@"response"]valueForKey:@"items"]objectAtIndex:0]valueForKey:@"userid"]];

【讨论】:

    【解决方案4】:
    NSDictionary *dic = (NSDictionary *) [json objectWithString:jsonStr];
     NSDictionary *dic1 = (NSDictionary *) [dic objectForKey:@"response"];
     NSDictionary *dic2 = (NSDictionary *) [dic1 objectForKey:@"Success"];
     NSDictionary *dic3 = (NSDictionary *) [dic1 objectForKey:@"items"];
        
     for(NSDictionary *str in dic3)
     {
        NSLog(@"str:%@",[str valueForKey:@"userid"]);
     }
    

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多