[iOS Dev] JSON Parsing with NSURLConnection + NSJSONSerialization
หลายๆ Blog ที่ผมเขียนเกี่ยวกับการ Parsing JSON มักใช้ 3rd party library ช่วย (JSONKit, AFNT)
วันนี้เราใช้ของที่มีใน iOS 5 SDK ขึ้นไปนะครับ มาทำการ Parse กัน ซึ่งใช้ง่ายไม่แพ้ JSONKit เลย
NSJSONSerialization นั้นเป็น Library ที่เล็กมาก
ก็เลยเขียนวิธีการใช้ NSURLConnection เบื้องต้นเลย
เพราะงานแบบนี้ โดยมากแล้วก็ต้องใช้ข้อมูล Online อยู่แล้ว
สิ่งที่เราจะ Parse กันวันนี้ ก็เป็นของง่ายๆ เช่นเคยนั่นคือ http://graph.facebook.com/[any_user_name]
ส่วนของ any_user_name จะเป็นอะไรก็แล้วแต่ ซึ่งเราก็จะได้ข้อมูลพื้นของผู้ใช้ Facebook คนนั้นกลับมา
การทำงานของ NSJSONSerialization คือการแปลง JSON Object ให้อยู่ในรูปของ Foundation Object (NSArray, NSDictionary, etc.) และสามารถที่จะเขียน JSON Object จาก Foundation Object ได้เช่นกัน
โปรแกรมนี้มี UI ง่ายๆ คือ มีปุ่มหนึ่งปุ่ม เมื่อกดแล้วจะ Get Data มาใส่ UITextView นะครับ
โดยเราจะใช้ Delegate ของ NSURLConnection เพื่อ Handle สถานะของการรับส่งข้อมูลด้วย
จากนั้นก็เริ่ม Implement สั่ง NSURLConnection ให้ไปติดต่อขอข้อมูลจาก Server
ต่อไปก็เป็นการเขียน Handle แต่ละจังหวะการติดต่อของ NSURLConnection ซึ่งผม Implement ไว้ 3 method ที่จะเป็นดังนี้
** นิดนึงตรง options ถ้าจะไม่มีต้องใส่ 0 นะครับ ห้ามใส่ nil นะครับ พังนะครับ :)
แค่นี้เองครับ จะเห็นได้ว่า เราใช้เพียง method เดียวจาก NSJSONSerialization ก็สามารถที่จะ Parse ได้แล้ว จาก Code นะครับ ถ้าจะเอามาแสดงเฉยๆ บน TextView อาจจะไม่ต้องเขียน Logic เช็คแบบที่ผมทำก็ได้ แต่เขียนไว้ให้เผื่อใช้ในกรณีอื่นๆ และให้รู้ว่าเลเวลบนสุดของ JSON Object นั้นจะเป็นข้อมูลได้เพียง 2 ชนิดเท่านั้น นั่นคือ NSArray และ NSDictionary
ในทางกลับกันเราก็สามารถสร้าง JSON Object จาก Foundation Object ได้โดยการเตรียมข้อมูลใน Format ที่ถูกต้อง ซึ่งมี method ที่ช่วยในการเช็คความถูกต้องให้ด้วย จากนั้นก็สั่งสร้าง ซึ่ง one line of code เหมือนเดิม ไม่ยากเลย ลองอ่านดูใน NSJSONSerialization
ในทางกลับกันเราก็สามารถสร้าง JSON Object จาก Foundation Object ได้โดยการเตรียมข้อมูลใน Format ที่ถูกต้อง ซึ่งมี method ที่ช่วยในการเช็คความถูกต้องให้ด้วย จากนั้นก็สั่งสร้าง ซึ่ง one line of code เหมือนเดิม ไม่ยากเลย ลองอ่านดูใน NSJSONSerialization





Comments
Post a Comment