从 JSON iOS 中提取值
Posted
技术标签:
【中文标题】从 JSON iOS 中提取值【英文标题】:Extracting values from JSON iOS 【发布时间】:2014-11-04 14:25:41 【问题描述】:我正在开发一个与我自己的服务器 (Apache->php) 通信的应用程序,并且我正在向应用程序发送一个带有 PHP 代码的简单 JSON 字典:
$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;
// --- 分析和提取值 --- //
【问题讨论】:
这真的是由 PHP:json_encode() 生成的 JSON 吗?由于 PHP 的 JSON 要求所有键和值都封装在引号中。另外,仅此一个“;”最后是腥的。无论如何,作为第一步,尝试将您的 JSON 编辑为以下格式:"Result"="1";"Result_Msg"="foo" 感谢您的回答,但我像您所说的那样更改了 PHP 代码,但在客户端我得到了与以前相同的响应: responseDict= Result = 1; "Result_Msg" = "成功!!!"; 那么有什么东西正在破坏你的 JSON 字符串。很抱歉我不能再帮你了,因为 Objective-c 不是我的领域。 我解决了,但感谢您的帮助! 【参考方案1】:有两种简单的方法可以从 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
)
编辑
然后,您可以使用以下命令检索布尔值:
BOOL myBool = [[myDictionary valueForKey:@"myKey"] boolValue];
还有你的字符串:
NSString *myString = [myDictionary objectForKey:@"myKey"];
【讨论】:
对不起,我之前忘记提了..当然我之前做过转换。所以变量“dJSON”已经是一个NSDictionary了! 在代码中的这些行添加断点时,您是否在字典中看到正确的值? 是的,有常见的键/值对,例如 key:Result value:1;键:Result_Msg 值:成功!!! 试试我在帖子中所做的编辑。您不应该使用 %@ 对 bool 进行 NSLog,但字符串看起来很奇怪...此外,打印结果时没有 ",因为它是一个没有任何空格的字符串【参考方案2】:我解决了... 这就像我犯过的最愚蠢和最耗时的错误......我使用了错误的键来从字典中提取值!!!不是 Response_Msg 和 Response,而是 Result 和 Result_Msg.... 只是乍一看是一样的。
谢谢大家!
【讨论】:
以上是关于从 JSON iOS 中提取值的主要内容,如果未能解决你的问题,请参考以下文章