单个对象 json 解析 - 我做错了什么?
Single object json parse - what am I doing wrong?
这肯定是我做错了。我一直在用头撞墙试图弄清楚发生了什么。我已经在我的应用程序的 android 版本中完成了这个 json 解析,现在试图在 xcode 中解析这个简单的 json 但无法完成。
NSError *myError = nil;
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&myError];
NSLog([res objectForKey:@"Date"]);
这段代码让我得到 "unrecognized selector sent to instance" 错误。
这是 json 数据,您可以看到 Date 是对象之一:
[{"Date":"2016-06-17T22:56:33.0811255-05:00"}]
在此先感谢您就此问题提供的任何帮助。我已尝试对此进行简化 post,但如果需要更多信息,我会尽快提供。
JSONObjectWithData
返回字典数组而不是字典。您打印出的原始 JSON 证实了这一点:
[{"Date":"2016-06-17T22:56:33.0811255-05:00"}] // This is an array
但是您正试图将该响应对象视为字典。这样做是在数组上调用字典方法 (objectForKey:
)。这会导致崩溃。尝试这样的事情:
NSError *error = nil;
id responseObject = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&error];
if (error)
{
// Handle error
return;
}
NSLog(@"%@", responseObject);
if ([responseObject isKindOfClass:[NSArray class]])
{
NSArray *responseArray = (NSArray *)responseObject;
for (id item in responseArray)
{
NSLog(@"%@", item);
if ([item isKindOfClass:[NSDictionary class]])
{
NSDictionary *dictionary = (NSDictionary *)item;
NSString *dateString = [dictionary objectForKey:@"Date"];
NSLog(@"%@", dateString);
}
}
}
else
{
// responseObject is not an array...
}
我很确定这是因为您应该首先将 res 设置为 [NSDictionary]
。然后选择该数组中的第一个元素,然后得到 objectForKey: "Date"
。正常 JSON 数据以 {
开头,这个以 [
开头。这意味着它是一个数组。
您可以在屏幕截图中亲眼看到 @: 1 Element 。然后它说 1 key/value 对。 NSDictionary 在 array.NSError
中
试试这个代码:
*myError = nil;
[NSDictionary] *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&myError];
if (res.count > 0) {
NSLog([res[0] objectForKey:@"Date"]);
}
这肯定是我做错了。我一直在用头撞墙试图弄清楚发生了什么。我已经在我的应用程序的 android 版本中完成了这个 json 解析,现在试图在 xcode 中解析这个简单的 json 但无法完成。
NSError *myError = nil;
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&myError];
NSLog([res objectForKey:@"Date"]);
这段代码让我得到 "unrecognized selector sent to instance" 错误。
这是 json 数据,您可以看到 Date 是对象之一:
[{"Date":"2016-06-17T22:56:33.0811255-05:00"}]
在此先感谢您就此问题提供的任何帮助。我已尝试对此进行简化 post,但如果需要更多信息,我会尽快提供。
JSONObjectWithData
返回字典数组而不是字典。您打印出的原始 JSON 证实了这一点:
[{"Date":"2016-06-17T22:56:33.0811255-05:00"}] // This is an array
但是您正试图将该响应对象视为字典。这样做是在数组上调用字典方法 (objectForKey:
)。这会导致崩溃。尝试这样的事情:
NSError *error = nil;
id responseObject = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&error];
if (error)
{
// Handle error
return;
}
NSLog(@"%@", responseObject);
if ([responseObject isKindOfClass:[NSArray class]])
{
NSArray *responseArray = (NSArray *)responseObject;
for (id item in responseArray)
{
NSLog(@"%@", item);
if ([item isKindOfClass:[NSDictionary class]])
{
NSDictionary *dictionary = (NSDictionary *)item;
NSString *dateString = [dictionary objectForKey:@"Date"];
NSLog(@"%@", dateString);
}
}
}
else
{
// responseObject is not an array...
}
我很确定这是因为您应该首先将 res 设置为 [NSDictionary]
。然后选择该数组中的第一个元素,然后得到 objectForKey: "Date"
。正常 JSON 数据以 {
开头,这个以 [
开头。这意味着它是一个数组。
您可以在屏幕截图中亲眼看到 @: 1 Element 。然后它说 1 key/value 对。 NSDictionary 在 array.NSError
中试试这个代码:
*myError = nil;
[NSDictionary] *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&myError];
if (res.count > 0) {
NSLog([res[0] objectForKey:@"Date"]);
}