我正在开发一个与我自己的服务器(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;
}
// ---分析并提取值--- //
答案 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 ....它在第一眼看上去看起来一样。
感谢大家!