Tôi đang làm việc với API thời tiết ngầm để tạo một ứng dụng và tôi đã nhấn một lỗi trong khi phân tích cú pháp khối liên quan đến cảnh báo nghiêm trọng. JSON sử dụng các cặp khóa-giá trị có cặp giá trị khóa phụ - không phải là vấn đề đối với tôi, vì tôi có thể tạo các từ điển tiếp theo trong số đó - nhưng mục nhập cảnh báo nghiêm trọng đã được chứng minh là có vấn đề. Xem dưới đây:Phân tích cú pháp một mảng JSON thành một NSDictionary
"alerts": [
{
"type": "WAT",
"description": "Flash Flood Watch",
"date": "3:13 PM EDT on April 28, 2012",
"date_epoch": "1335640380",
"expires": "8:00 AM EDT on April 29, 2012",
"expires_epoch": "1335700800",
"message": "\u000A...Flash Flood Watch in effect through Sunday morning...\u000A\u000AThe National Weather Service in Charleston has issued a\u000A\u000A* Flash Flood Watch for portions of northeast Kentucky... (Note: I trimmed this for length's sake),
"phenomena": "FF",
"significance": "A"
}
]
Những "cảnh báo" cặp khác với những người khác tôi đã có thể để phân tích bởi vì nó có này [] khung xung quanh các tiểu giá trị và tôi không chắc chắn làm thế nào để xóa nó để Tôi có thể truy cập vào các giá trị phụ. Trong các ví dụ khác tôi đã có thể phân tích cú pháp, nó chỉ có các dấu ngoặc đơn {} chứ không phải cả dấu ngoặc {} và []. Để tham khảo, các dấu ngoặc đơn luôn hiện diện - ngay cả khi không có cảnh báo thời tiết khắc nghiệt ... trong trường hợp đó, cặp "cảnh báo" trả về ngoặc vuông [] mà không có cặp con nào hiện diện.
Có cách nào tôi có thể xóa dấu ngoặc vuông [] khỏi NSDictionary hay bỏ qua chúng? Lời khuyên nào sẽ được đánh giá cao!
Để tham khảo và khắc phục sự cố giúp đỡ, dưới đây là cách tôi đang phân tích các phần còn lại của tài liệu JSON thành công:
1) Tạo một NSDictionary từ JSON liệu
//Process Weather Call
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
2) Tạo các từ điển tiếp theo cho các cặp json lồng nhau
NSDictionary *current_observation = [json objectForKey:@"current_observation"];
3) Gán các giá trị
NSString* weather;
weather = [current_observation objectForKey:@"weather"];
Vì vậy, kết quả cuối cùng sẽ là chuỗi có nội dung "Một phần mây" hoặc thứ gì đó, cùng với nhiều giá trị thời tiết liên quan mà tôi chưa hiển thị. Các phân tích cú pháp thành công bởi vì chúng chỉ có các dấu ngoặc đơn {} chứ không phải dấu ngoặc [].
Tất nhiên, một mảng!Những dấu ngoặc đó nên cho nó đi ... Tôi nghĩ tôi đã làm việc quá lâu ngày hôm nay. : p Dù sao cũng có ý nghĩa trong bối cảnh cảnh báo - có thể có nhiều cảnh báo tại một thời điểm nhất định, vì vậy sẽ có một số cách để xử lý điều đó trong API. Tôi sẽ dùng thử - cảm ơn sự giúp đỡ của bạn! –