【问题标题】:Get server JSON response as a NSDictionary获取服务器 JSON 响应作为 NSDictionary
【发布时间】:2019-10-18 16:05:31
【问题描述】:

我正在尝试将服务器响应 NSData 转换为 NSDictionary,但它在 NSCFString 之后返回。

NSError *error;
NSDictionary* jsonDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

并且无法使用objectForKey 访问数据。 给我一个方法来获得这个响应作为NSDictionary 或转换机制。无法得到任何东西 NSJSONSerializationkNilOptions 返回 nil

【问题讨论】:

  • 请检查方法返回什么类型。
  • @iPeter 这是 NSCFString
  • data 很可能实际上并不代表 JSON 字典。从data 创建一个字符串,看看你实际得到了什么。
  • @rmaddy 使用 NSJSONReadingAllowFragments 返回正确的 JSON。
  • 这与你所说的一切相矛盾。您说目前,jsonDict 确实是NSCFString 而不是NSDictionary。因此data 不代表 JSON 字典。如果您将data 转换为字符串并打印出来,您将能够看到您得到的实际 JSON。然后,您可以弄清楚如何从您获取数据的任何地方获取正确的 JSON。

标签: ios objective-c json nsdictionary nscfstring


【解决方案1】:

根据this question can't serialize with NSJSONSerialization with option kNilOptions.

所以首先我们需要将上面的序列化 JSON 转换为NSString,然后再次将其转换为 NSData。然后你可以用kNilOptions将它转换回NSDictionary

NSString* jsonString = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id jsonDictionary = [NSJSONSerialization jsonData options:0 error:nil];

【讨论】:

  • 我认为这行不通! , 如果 Data 本身是字符串数据,那么任何选项都不起作用
  • 不。它是 NSData。我们必须转换。
【解决方案2】:

在使用 NSJSONSerialization 一段时间后,我在解析数据时遇到的问题多于解决方案。

我会建议您使用 SBJson 库,它可以作为 cocoapod 找到,并且多年来为我的许多项目提供了很好的服务,没有任何问题

例如[https://cocoapods.org/pods/SBJson][1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2015-06-28
    • 2018-01-25
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多