เดิมหากจะทำอะไรกับ JSON เราก็จะมักจะต้องพึ่งพา third party library อยู่เสมอ แต่เมื่อมาถึงยุคของ iOS 5 Apple ก็ได้เพิ่ม JSON library เข้ามาให้เราพร้อมใช้ได้ง่ายๆ แล้ว
ทำให้เราสามารถแปลง Object อย่าง NSString, NSNumber, NSArray หรือ NSDictionary ให้กลายเป็น JSON ได้ง่ายๆ โดยไม่จำเป็นต้องพึ่งพา third party library อีกต่อไป
พระเอกของงานนี้ก็คือ NSJSONSerialization เราจะใช้มันช่วยในการแปลง Object ให้กลายเป็น JSON และแปลงจาก JSON กลับมาเป็น Object ได้ ดังนี้
แปลง JSON Data ให้กลายเป็น Object
// สมมติว่าเราได้รับ data มาจากอินเทอร์เน็ต
NSData* data = [NSData dataWithContentsOfURL: [NSURL URLWithString: urlString]];
// แปลงเป็น Object ด้วยพระเอกของเรา
NSDictionary* json = [NSJSONSerialization JSONObjectWithData: data
options: kNilOptions
error: &error];
สำหรับ options ของการแปลง JSON ให้กลายเป็น Object นั้น จะเกี่ยวกับเรื่องการความต้องการให้สิ่งที่แปลงออกมามีลักษณะเป็นอย่างไรในลักษณะของ Mutable หรือ Immutable และอยากจะให้ top level object แยกกันเป็น array หรือ dictionary หรือไม่ อ่านรายละเอียด options ได้ที่นี่
แปลง Object เป็น JSON Data
// เริ่มจากเรามี Object ที่ต้องการแปลงเป็น JSON
NSDictionary* objectInfo = ...
// แปลงเป็น JSON ด้วยพระเอกของเรา
NSData* jsonData = [NSJSONSerialization dataWithJSONObject: objectInfo
options: NSJSONWritingPrettyPrinted
error: &error];
// ลองดูหน้าตาของ JSON ที่เราแปลงได้
NSString *jsonString = [[NSString alloc] initWithData:jsonData
encoding:NSUTF8StringEncoding];
กรณีนี้ถ้าหากเราต้องการส่งข้อมูลไปที่อื่นๆ เช่นส่งไปยัง server เราสามารถกำหนด option เป็น kNilOptions ได้ เพื่อตัดอักขระส่วนที่ไม่จำเป็นออกไป แต่ที่เรากำหนด options เป็น NSJSONWritingPrettyPrinted ก็เพื่อให้เราสามารถอ่านได้ง่ายนั่นเอง
เพียงเท่านี้เราก็สามารถทำงานร่วมกับ JSON ได้อย่างมีความสุขแล้ว