使用NSJSONSerialization时从NSDictionary获取null

时间:2016-04-29 03:20:45

标签: ios objective-c json yahoo-api nsjsonserialization

我是开发和stackoverflow的新手,请帮助我。我正在尝试做一个简单的应用程序,其中YQL链接用于获取本地数据并以表格格式显示它。为此我将数据转换为字典,稍后我想将其发送到表中。但是当我试图将数据转换为Dictionary时,它表示null。请帮我。检查下面的截图。提前谢谢。

NSString *str = @"https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20local.search%20where%20zip%3D'94085'%20and%20query%3D'pizza'&diagnostics=true"; 

这里我将json查询转换为字符串(* str)

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]]; 

//   NSString *stringFromData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//    NSLog(@"%@", stringFromData);

当我试图实现这个注释代码我得到了预期的结果,但我想把所有数据放入字典并显示它,所以我试图将数据转换为字典

NSDictionary *dataFromWeb = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];


NSDictionary *queryDict = [dataFromWeb objectForKey:@"query"];
NSDictionary *results = [dataFromWeb objectForKey:@"results"];
NSString *allResults = [queryDict objectForKey:@"Results"];

NSLog(@"%@", dataFromWeb);

}

enter image description here

5 个答案:

答案 0 :(得分:7)

默认情况下,Yahoo API返回的响应为XML。您应该将format=json附加到查询字符串,以便以JSON格式获取响应,以便您可以使用NSJSONSerialization类对其进行解析:

https://query.yahooapis.com/v1/public/yql?format=json&q=select...

答案 1 :(得分:1)

您的Api返回xml数据,因此您需要进行xml解析

NSJSONSerialization用于json解析

NSString *str = @"https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20local.search%20where%20zip%3D'94085'%20and%20query%3D'pizza'&diagnostics=true";

    NSURL *UrlFromStr = [NSURL URLWithString:str];

在您的浏览器上点击此UrlFromStr,您会看到它返回的xml数据不是json

使用NSXMLParser解析xml数据

答案 2 :(得分:1)

请使用NSXMLParser解析xml数据而不是NSJSONSerialization。 NSJSONSerialization用于解析JSON数据。

在.h文件中声明

@property (nonatomic, strong) NSXMLParser *xmlParser;
<。>在.m文件中。

NSString *str = @"https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20local.search%20where%20zip%3D'94085'%20and%20query%3D'pizza'&diagnostics=true";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]]; 

 self.xmlParser = [[NSXMLParser alloc] initWithData:data];
 self.xmlParser.delegate = self;

 // Initialize the mutable string that we'll use during parsing.
 self.foundValue = [[NSMutableString alloc] init];

  // Start parsing.
 [self.xmlParser parse]; 

答案 3 :(得分:0)

您要解析的对象的格式是XML,但是您使用ParseJSON类来解析它,因此它返回NULL。您可以使用NSXML类来解析它,然后设置其委托来执行相关的方法。祝你好运..

答案 4 :(得分:0)

你的Api不是json,它的XML格式使用XML Parser,请访问下面的链接,

http://www.theappguruz.com/blog/xmlparsing-with-nsxmlparser-tutorial

希望它有所帮助。