从JSON iOS中提取值

时间:2014-11-04 14:25:41

标签: php ios objective-c json

我正在开发一个与我自己的服务器(Apache-> PHP)通信的应用程序,我发送一个简单的JSON字典,其中包含从服务器到应用程序的PHP代码:

$aJSON = array('Result' => TRUE, 'Result_Msg' => "Success!!!");
echo json_encode($aJSON);

使用这些代码行,我想从键中提取值:'Result'和'Result_Msg':

// Logging the received and converted JSON/NSMutableDictionary
NSLog(@"responseDict=%@",dJSON);

BOOL b = [dJSON objectForKey:@"Response"];
NSString *string = [dJSON objectForKey:@"Result_Msg"];

NSLog(@"%@", [dJSON objectForKey:@"Response_Msg"]);
NSLog(@"%@", [dJSON valueForKey:@"Response_Msg"]);
NSLog(@"%@", [dJSON valueForKey:@"Response"]);
NSLog(@"%@", [dJSON objectForKey:@"Response"]);

我打印/记录的JSON结果如下所示:

  

responseDict = {       结果= 1;       “Result_Msg”=“用户已成功添加。请验证您的邮件地址。”; }

不幸的是,每个NSLog以及变量“b”和“string”都等于(null)。

此外,我对两种不同类型的键有点困惑,例如Result没有引号(“”)但是Result_Msg在引号中。

希望有人可以提供帮助。提前谢谢!

修改

变量“dJSON”已经是NSDictionary(/ MutableDic)。我这样做是为了这些:

NSError *errorJson=nil;
    NSMutableDictionary* dJSON = [NSJSONSerialization JSONObjectWithData:_responseData options:kNilOptions error:&errorJson];
if (error)
{
    UIAlertView *alert ....
    return;
}

// ---分析并提取值--- //

2 个答案:

答案 0 :(得分:0)

有两种简单的方法可以从PHP代码中检索字典。

第一个,你不需要在你的objective-c代码中改变对服务器的调用就是使用这个函数:

- (NSDictionary *)dictionaryFromJSONData:(NSData *)data
{
    NSError *error;
    NSDictionary *dictionaryParsed = [NSJSONSerialization JSONObjectWithData:data
                                                                 options:0
                                                                   error:&error];
    if (!dictionaryParsed)
    {
        if (error)
        {
            NSLog(@"Error parsing dictionary");
        }
        return nil;
    }
    return dictionaryParsed;
}

第二个是使用AFNetworking库,顺便提一下,它提供了许多有用的东西。 (在你的案例中查看AFHTTPRequestOperation

修改

然后,您可以使用以下内容检索bollean:

BOOL myBool = [[myDictionary valueForKey:@"myKey"] boolValue];

你的字符串:

NSString *myString = [myDictionary objectForKey:@"myKey"];

答案 1 :(得分:0)

我解决了...... 这就像我遇到的最愚蠢和时间错误......我使用了错误的键来从字典中提取值!它不是Response_Msg和Response,它是Result和Result_Msg ....它在第一眼看上去看起来一样。

感谢大家!