JSON NSDictionary 在输出到日志时显示空描述

Posted

技术标签:

【中文标题】JSON NSDictionary 在输出到日志时显示空描述【英文标题】:JSON NSDictionary showing null description when output to log 【发布时间】:2014-07-17 20:59:37 【问题描述】:

我正在学习一些基本的 php、SQL、JSON,以便我可以在我的 ios 程序中使用数据库。在我的应用程序中解析这些信息时我遇到了麻烦。这是我的代码,但每当我运行它时,我的 NSLog 都会显示 (null)。

NSURLSessionConfiguration *config =
    [NSURLSessionConfiguration defaultSessionConfiguration];

    //@property (nonatomic, strong) NSURLSession *session;
    _session = [NSURLSession sessionWithConfiguration:config delegate:self
        delegateQueue:nil];

//my test practice site url
NSString *requestString = @"http://sqlphp.site88.net/default.php";
NSURL *url = [NSURL URLWithString:requestString];
NSURLRequest *req = [NSURLRequest requestWithURL:url];

NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:req 
    completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) 

    //@property (nonatomic) NSArray *databaseArray;
    self.databaseArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

    //shows (null) on log whenever ran
    NSLog(@"%@", self.databaseArray);         
];

您也可以随意跳转到网站by clicking here,但如果您不想点击这里是 JSON 字符串。

["id":"1","name":"pippo","surname":"Mr Pippo","age":"108","id":"2","name":"Paperino","surname":"Mr Paperino","age":"109"]

有没有人知道我做错了什么,它没有显示为字符串?我几乎逐字复制了 Big Nerd Ranch 书中的示例来练习这一点,除了他们使用 .json 而不是 .php

【问题讨论】:

【参考方案1】:

使用 NSError,它们通常具有您解决错误所需的信息。

我将您的序列化行更改为:

NSArray * databaseArray = [NSJSONSerialization JSONObjectWithData:data
                                                          options:0
                                                          error:&error];

然后查看错误内容:

(lldb) po error
Error Domain=NSCocoaErrorDomain Code=3840
"The data couldn’t be read because it isn’t in the correct format."
(JSON text did not start with array or object
and option to allow fragments not set.)
UserInfo=0x60800046e680

所以,有了这些信息,我尝试读取数据的实际内容,结果如下:

(lldb) po [[NSString alloc] initWithData:data encoding:4]
<html>
 <head>
  <title>SQL To JSON Test</title>
 </head>
 <body>
["id":"1","name":"pippo","surname":"Mr Pippo","age":"108","id":"2","name":"Paperino","surname":"Mr Paperino","age":"109"]   
<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->

这就是问题所在! 您的网页不只是返回您的 JSON 字符串,而是包含它的 HTML 文件!

【讨论】:

谢谢!似乎我的脚本顶部有一些 HTML,底部有一些 javascript 来显示来自我的主机的广告。这是固定的,现在可以工作了。非常感谢!

以上是关于JSON NSDictionary 在输出到日志时显示空描述的主要内容,如果未能解决你的问题,请参考以下文章

NSDictionary 到 Xamarin.iOS 中的 Json

JSON 到 NSDictionary。不应该这么难吗?

.net6 asp:在容器内运行时,默认输出日志格式为 json

NSJSONSerialization 弄乱了结果 NSDictionary

返回的 JSON 数据从 NSDictionary 变为 NSArray

NSDictionary 在插入数据时不返回键的排列方式?