【问题标题】:can I NSLog a JSON and see its real format?我可以 NSLog 一个 JSON 并查看它的真实格式吗?
【发布时间】:2014-09-23 12:38:04
【问题描述】:

我只是想知道这个NSLog vs JSON 问题我已经有一段时间了。

所以我有我的responseObject(类型是id),我可以简单地NSLog吗?

当我这样做时,我会看到类似 JSON 的文本,但存在一些大问题,我不知道是真正的 JSON 有问题还是 NSLog 失败了。

我可以相信NSLog 吗?或者如果我想“以网络方式”打印它,我需要做其他事情吗?

【问题讨论】:

  • 一般情况下,JSON 作为 NSData 对象接收。要 NSLog 它(以任何有意义的形式),您需要首先转换为 NSString (initWithData:encoding:)。或者您可以使用 NSJSONSerialization 转换为字典/数组并记录——它不是 完全 JSON 表示,但非常接近。
  • (如果你说的“大问题”是()应该有[]=应该有:;应该有是,,并且缺少一些引号,那么您将转储 NSArray/NSDictionary 表示,这是“正常的”。)
  • 好的,谢谢!是的,这让我很困扰。但是因为我后来在代码中对该数据有错误,所以我试图获取它并想知道我的错误是在 json 之前还是在 json 之后。现在我知道 JSON 很好:)
  • (NSArray 和 NSDictionary 的转储格式基本上早于 JSON,转储格式与对应的 JSON 非常相似,这基本上只是运气不好。)

标签: ios json nslog


【解决方案1】:

一旦您获得了包含 HTTP 响应内容的 NSData 对象,可能会使用:

NSData *data = [NSData dataWithContentsOfURL:someURL];

您通常使用以下方法将其“解析”为 Objective-C 对象:

NSError *error = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data
                                                     options:kNilOptions 
                                                       error:&error];

不过,您也可以先将数据响应转为字符串来记录它:

NSString *jsonString = [[NSString alloc] initWithData:data
                                             encoding:NSUTF8StringEncoding];
NSLog(@"Response JSON=%@", jsonString);

【讨论】:

    【解决方案2】:

    如果您的 responseObject 是类型 id 并且您尝试使用 NSLog 打印它们,那么它只会返回对象名称。

    要获取有关 JSON 的更多详细信息,请访问以下 URL: How to output JSon data in Objective-C

    希望对你有所帮助。

    【讨论】:

      【解决方案3】:

      为格式良好的响应日志执行以下操作。

      id jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
      NSLog(@"Response : %@",[jsonResponse description]);
      

      希望,这会奏效。

      【讨论】:

        猜你喜欢
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 2020-10-20
        • 2011-05-19
        • 1970-01-01
        相关资源
        最近更新 更多