簡體   English   中英

Objective-C中的JSON解析錯誤

[英]JSON parsing error in Objective-C

我正在嘗試在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獲取所有Year ,在另一個NSArray獲取所有SumOfYear

錯誤是從這條線

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

似乎(如果沒有您提供更好的信息,很難確定) 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];
}

我建議這樣做:

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"];
}

解析JSON並獲取兩個數組的最簡單方法是

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

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

KVC是解析數據結構的絕佳工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM