【问题标题】:parsing json response in my objective-c program在我的 Objective-C 程序中解析 json 响应
【发布时间】:2012-05-06 23:54:11
【问题描述】:

我使用 SBJSON 解析我的响应,总线不知何故我无法将我的数据取出。 我应该如何解析这个回复?

{"StatusCode":0,"Message":"email already exists","Content":{"HasApplication":false,"IsFaceBook":false,"UserActive":false,"UserAuthenticationType":0,"UserCredits":0,"UserDayAdded":0,"UserEmail":null,"UserEmailWasVerified":false,"UserGuid":null,"UserID":0,"UserSellerApproved":false,"UserTokef":0},"TotalCount":0}

我是这样开始的:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{
    [responseData setLength:0];
    NSLog(@"%@",response); 
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{
    [responseData appendData:data];
    NSLog(@"Data recived");     
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    NSLog(@"Connection failed! Error - %@ %@",[error localizedDescription],
          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
    responseData = nil;

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
    NSLog(@"conenction loading finished"); 

    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    SBJsonParser *parser = [[SBJsonParser alloc] init];
    NSMutableDictionary *jsonDictionary = [parser objectWithString:responseString error:nil];
}

但下一步是什么?我需要 StatusCode 值和 UserID。

【问题讨论】:

  • 打印 jsonDictionary 并自己查看,您将如何检索 Dictionary 中键的值/对象?

标签: iphone objective-c json sbjson


【解决方案1】:

一个你有字典,你可以使用它,例如:

NSMutableDictionary *jsonDictionary = [parser objectWithString:responseString error:nil];
NSNumber * statusCode = [jsonDictionary objectForKey:@"StatusCode"];
NSString * message = [jsonDictionary objectForKey:@"Message"];
NSDictionary * content = [jsonDictionary objectForKey:@"Content"];
// etc...

【讨论】:

    【解决方案2】:

    从 JSON 字符串的外观来看,您有一个包含三个键值对的字典,其中一个是另一个具有多个键值对的字典。因此,一旦您将 JSON responseString 分配给您的 NSMutableDictionary,就可以解决这个问题:

    应该是这样的:

    NSNumber *statusCode = [jsonDictionary objectForKey:@"StatusCode"];
    NSDictionary *contentDict = [jsonDictionary objectForKey@"Content"];
    NSString *userID = [contentDict valueForKey@"UserID"];
    

    另一方面,如果您要进行大量 Web 服务交互,则可能需要认真研究 AFNetworking。它会改变你的生活:)

    另外,我不明白为什么需要 jsonDictionary 成为 NSMutableDictionary。除非您稍后更改它,否则使用 NSDictionary,它的开销更少。

    【讨论】:

      【解决方案3】:

      嗯...... NSMutableDictionary *jsonDictionary = [parser objectWithString:responseString 也许不是 NSMutableDictionary,而是 NSDictionary。 然后:

      NSString *statusCode = [jsonDictionary valueForKey:@"StatusCode"];
      NSDictionary *contentDict = [jsonDictionary objectForKey@"Content"];
      NSString *userID = [contentDict valueForKey@"UserID"];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多