【问题标题】:Getting null from NSDictionary when NSJSONSerialization is being used使用 NSJSONSerialization 时从 NSDictionary 获取 null
【发布时间】:2016-08-24 01:30:26
【问题描述】:

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

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);

}

【问题讨论】:

  • 使用error 参数。它的存在是有原因的。

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


【解决方案1】:

您的 Api 不是 json,其 XML 格式使用 XML Parser,请访问以下链接,

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

希望对您有所帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      请使用 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]; 
      

      【讨论】:

        【解决方案4】:

        你的 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数据

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多