11/08/2018, 22:32

[iOS] Tìm hiểu về phân tích JSON và XML trong lập trình iOS

I/ Serialize JSON Biến đổi từ Array hoặc Dictionary thành JSON Để biến đổi từ Array (hoặc Dictionary) thành JSON, ta sử dụng phương thức dataWithJSONObject:options:error: . Đối tượng JSON được trả về là kiểu NSData type. Array và Dictionary có thể chứa các instance của NSString, NSNumber, ...

I/ Serialize JSON

  1. Biến đổi từ Array hoặc Dictionary thành JSON

Để biến đổi từ Array (hoặc Dictionary) thành JSON, ta sử dụng phương thức dataWithJSONObject:options:error: . Đối tượng JSON được trả về là kiểu NSData type. Array và Dictionary có thể chứa các instance của NSString, NSNumber, NSArray, NSDictionary hoặc NSNull

Ví dụ, ta có Dictionary sau:

NSDictionary *person =
@{
  @"First Name" : @"Anthony",
  @"Last Name" : @"Robbins",
  @"Age" : @51,
};

Phương thức để biến đổi từ NSDictionary person thành 1 JSON NSData được viết như sau:

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:person options:NSJSONWritingPrettyPrinted error:&error];
  1. Biến đổi từ JSON thành Array hoặc Dictionary

Để biến đổi từ JSON thành Array hoặc Dictionary, ta sử dụng phương thức JSONObjectWithData:options:error: . Lưu ý là đối tượng JSON truyền vào để biến đổi phải là 1 instance của NSData. Đối tượng trả về sẽ là Array hoặc Dictionary tùy thuộc vào data được truyền vào JSON trước đó.

Ví dụ đối với jsonData trong ví dụ trên, để biến đổi từ JSON về lại Dictionary, ta biến đổi như sau:

id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error];

NSDictionary *deserializedDictionary = jsonObject;

Ở đây, do ban đầu đối tượng person của ta là một Dictionary, nên kết quả trả về của đối tượng jsonObject là Dictionary. nếu đối tượng ban đầu là Array, kết quả trả về sẽ là:

NSArray *deserializedArray = jsonObject;

II/ Phân tích XML

Để phân tích file XML, chúng ta sử dụng lớp NSXMLParser của iOS SDK. lớp NSXMLParser cung cấp các phương thức Delegate rất tốt để phục vụ việc phân tích file XML. Các phương thức Delegate bao gồm:

  1. parserDidStartDocument: Phương thức này được gọi khi việc phân tích file XML được bắt đầu, và chỉ được gọi 1 lần khi phân tích 1 file XML

  2. parserDidEndDocument: Phương thức này được gọi khi kết thúc việc phân tích file XML, và chỉ được gọi 1 lần khi việc phân tích file kết thúc

  3. parser:parseErrorOccurred: Phương thức này được gọi khi có lỗi sảy ra trong quá trình phân tích file XML. phương thức này chứa đối tượng error, chúng ta có thể sử dụng đối tượng error này để xác định lỗi khi phân tích.

  4. parser:didStartElement:namespaceURI:qualifiedName:attributes: Phương thức này được gọi khi tìm thấy một thẻ mở element của file XML

  5. parser:didEndElement:namespaceURI:qName: Ngược lại với phương thức trên, phương thức này được gọi khi tìm thấy một thẻ đóng element của file XML

  6. parser:foundCharacters: phương thức này được gọi trong quá trình phân tích nội dung của một element. Tham số thứ 2 (foundCharacters) là một chuỗi giá trị chứa các ký tự vừa được phân tích.

Do ví dụ về việc phân tích file XML khá dài, nên mình sẽ không đưa ra ví dụ ở đây, các bạn có thể tham khảo ví dụ trên rất nhiều trang web, tutorial hoặc trong sách "iOS 7 programming Cookbook".

Tóm lại, để sử dụng, quản lý và truyền giữ liệu giữa các thiết bị, sử dụng service giữa thiết bị và server,... việc nắm kỹ thuật phân tích file JSON và XML là một việc rất quan trọng. Để tìm hiểu rõ hơn về phân tích JSON và XML, các bạn có thể tham khảo trong tutorial sau: http://www.appcoda.com/parse-xml-and-json-web-service/ . Cảm ơn các bạn đã đọc blog này ^_^

0