2013-02-12 112 views
-1

我曾经能够解析这个JSON,完全没有任何错误,但突然间它停止工作,它不是我的API密钥...奇怪的JSON解析错误?

这是我想解析的内容: http://pastebin.com/vv8ScBfZ

这是我的解析代码:

NSError *myError = nil; 
NSDictionary *flighttrackjson = [NSJSONSerialization JSONObjectWithData:jsonresponse options:NSJSONReadingMutableLeaves error:&myError]; 
NSArray *FlightStatus = [flighttrackjson objectForKey:@"flightStatuses"]; 
NSString *FlightID = [FlightStatus valueForKey:@"flightId"]; 
NSString *DepartACode = [FlightStatus valueForKey:@"departureAirportFsCode"]; 
NSString *ArivalACode = [FlightStatus valueForKey:@"arrivalAirportFsCode"]; 
NSArray *DepartATime = [FlightStatus valueForKey:@"departureDate"]; 
NSArray *AriveATime = [FlightStatus valueForKey:@"arrivalDate"]; 
NSString *DepartTimeString = [DepartATime valueForKey:@"dateLocal"]; 
NSString *ArriveTimeString = [AriveATime valueForKey:@"dateUtc"]; 
NSArray *Delays = [FlightStatus valueForKey:@"delays"]; 
NSString *DepartDelayMinutes = [Delays valueForKey:@"departureGateDelayMinutes"]; 
NSString *ArriveDelayMinutes = [Delays valueForKey:@"arrivalGateDelayMinutes"]; 
NSArray *AirportInfo = [FlightStatus valueForKey:@"airportResources"]; 
NSString *DepartTerminal = [AirportInfo valueForKey:@"departureTerminal"]; 
NSString *DepartAGate = [AirportInfo valueForKey:@"departureGate"]; 
NSString *ArriveTerminal = [AirportInfo valueForKey:@"arrivalTerminal"]; 
NSString *ArriveAGate = [AirportInfo valueForKey:@"arrivalGate"]; 
NSString *BaggageClaim = [AirportInfo valueForKey:@"baggage"]; 
flightID.text=FlightID; 
DepartCode.text=DepartACode; 
ArrivalCode.text=ArivalACode; 
DepartTime.text=DepartTimeString; 
ArriveTime.text=ArriveTimeString; 
DepartDelay.text=DepartDelayMinutes; 
ArriveDelay.text=ArriveDelayMinutes; 
DepartTerm.text=DepartTerminal; 
DepartGate.text=DepartAGate; 
ArriveTerm.text=ArriveTerminal; 
ArriveGate.text=ArriveAGate; 
Baggage.text=BaggageClaim; 

当我运行的是,我得到这个错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x8aa85f0' 

不,我不想将数组的值赋给一个字符串。所以我在这里很困惑。

想法?

谢谢!

+1

阅读错误消息。看看它在哪里被提出。 – 2013-02-12 19:01:01

+0

@HotLicks不要指望不可能。 :P – 2013-02-12 19:01:57

回答

1

No, I am not trying to assign the value of array to a string

哦,你是的。

FlightStatus = [flighttrackjson objectForKey:@"flightStatuses"]; 
FlightID = [FlightStatus valueForKey:@"flightId"]; 

FlightStatus是一个数组,而不是一个字典(使用例如JSONlint到漂亮地打印的JSON,你会看到它)。

而且我怀疑有在你的代码是这样几个类似的错误,一个特别的在于flightId对应于NSNumber而不是NSString - 你还可以从得到一个崩溃。

请研究JSON的官方参考和NSJSONSerialization类的文档,以查看哪些JSON数据类型映射到哪些Foundation类(顺便提一下,这很合乎逻辑)。

+0

对不起,感谢提示,我一定会读更多来教育自己。 – 2013-02-12 21:02:41