Ios Objective-C中的JSON解析错误

Ios Objective-C中的JSON解析错误,ios,objective-c,json,cocoa-touch,parsing,Ios,Objective C,Json,Cocoa Touch,Parsing,我试图在Objective-C中解析这个JSON。响应对象看起来是这样的: ( { "Year": "2003", "SumOfYear": "0.20" }, { "Year": "2004", "SumOfYear": "0.64" }, { "Year": "2005", "SumOfYear": "0.90" } ) 我尝试了以下方法 NSDictionary* dictionaryObtained = [NSJS

我试图在Objective-C中解析这个JSON。响应对象看起来是这样的:

(
  {
    "Year": "2003",
    "SumOfYear": "0.20"
  },
  {
    "Year": "2004",
    "SumOfYear": "0.64"
  },
  {
    "Year": "2005",
    "SumOfYear": "0.90"
  }
)
我尝试了以下方法

NSDictionary* dictionaryObtained = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:&error];

NSLog(@"dict = %@",dictionaryObtained);
NSDictionary *yearsObtained = [dictionaryObtained objectForKey:@"Year"];
但我得到以下错误:

-[__NSCFArray bytes]: unrecognized selector sent to instance 0x18a3bfd0
我哪里做错了? 我想在一个
NSArray
中获取所有
年份
,在另一个
NSArray中获取所有
SumOfYear

错误来自这一行

NSDictionary* dictionaryObtained = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:&error];

我建议这样做:

NSArray * dataArray =  [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];
for(NSDictionary * diction in dataArray)
{ 
    NSLog(@"%@",[diction objectForKey:@"Year"]);
}
因为您有一个字典数组,所以应该将JSONSerialization放在NSArray中 然后带着字典进入它里面,这样你就可以随心所欲地计算你的年数了

从下面的注释来看,您的
responseObject
似乎已经被解析了 所以你可以走了

 for(NSDictionary* dict in responseObject)
 {
     NSLog(@"%@",[dict objectForKey:@"Year"]);
 }
json错误(格式正确,但与代码不匹配)。 如果您希望代码正常工作,这是正确的:

{ "Year":
    [
          {
          "Year": "2003",
          "SumOfYear": "0.20"
          },
          {
          "Year": "2004",
          "SumOfYear": "0.64"
          },
          {
          "Year": "2005",
          "SumOfYear": "0.90"
          }
     ]
}
您的json可以解析为:

for(NSDictionary *myDict in jsonObj){
     NSString *year = [myDict objectForKey:@"Year"];
}
看起来(如果没有更好的信息,很难确定,
responseObject
已经从JSON字符串解析为Objective-C对象。因此,您不应该再次通过NSJSONSerialization运行它

但您拥有的是一个NSArray,因此,假设您想要收集一个“Year”值数组,您需要以下内容:

NSMutableArray* yearsObtained = [NSMutableArray array];
for (NSDictionary* dictionaryObtained in responseObject) {
    NSLog(@"dict = %@",dictionaryObtained);
    NSString* year = [dictionaryObtained objectForKey:@"Year"];
    NSLog(@"year = %@", year);
    [yearsObtained addObject:year];
}

解析JSON并获取两个数组的最简单方法是

NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];

NSArray *years = [jsonArray valueForKeyPath:@"Year"];
NSArray *sums = [jsonArray valueForKeyPath:@"SumOfYear"];

KVC是解析数据结构的绝佳工具。

为什么要使用转义字符作为年份?(在最后一行)。当你打印字典时,它是什么样子的?xcode不解析JSON。这只是一个IDE。@vikingosegundo怎么了?“我试图在xcode中解析这个JSON”他试图在名为xcode的IDE中解析JSON,他可以在visual studio或eclipse上尝试,但他尝试在xcode中。。。标记为Objective-C而不是Xcode的问题如果您实际查看JSON,那么您有一个包含“objects”(字典)的数组。访问json.org,花5-10分钟学习json语法——这是一项非常明智的时间投资。什么是
responseObject
?是NSData吗?这就是我使用的“[manager POST:postRequestString参数:nil success:^(AFHTTPRequestOperation*操作,id responseObject)`错误在哪一行触发?(尝试调试)他的问题是“responseObject”已经被解析并且是一个NSArray。@HotLicks用那个有用的注释更新了答案,希望它现在能工作)我尝试了这个,但得到了相同的错误。你是说
jsonArray的
responseObject
吗?我刚刚用你的数组尝试过。还可以!顺便说一句,它与(jsonArray中的NSDictionary*myDict)完全相同如果您的jsonArray还可以。不,我指的是我们从[NSJSONSerialization JSONObject WithData:…]获得的数组