ข้อควรระวังในการใช้ SimpleJSON by Ziah
May0
เนื่องจากทีมได้ใช้ SimpleJSON กันมานานระดับนึงแล้ว แต่ก็ยังมีบั๊คโผล่มาจากการเขียนโค้ดเพิ่มอยู่บ้างบางครั้ง จากเจ้า SimpleJSON ซึ่งมันง่ายสมชื่อ จนทำให้การใช้งานมันสร้างบั๊คแบบไม่รู้ตัวได้ง่ายมากๆ คือการ .Asใดๆ ก็ตามของมัน (ie. .AsInt .AsFloat) ที่มันจะสร้างตัวแปรใหม่มากำหนดค่าเริ่มต้นมาให้เลยทั้งๆที่มันไม่มี index นี้อยู่หรือเป็น null ส่วนมากมักเกิดจากการเช็คเงื่อนไข if ทั่วๆไปที่จะชอบเผลอใส่ .AsInt เข้ามา ทำให้มันมีค่าขึ้นมาเองทันที และการเข้าถึงตัวแปรชั้นลึกๆแล้ว .AsInt โดยที่ไม่เช็คก่อนว่ามีหรือเปล่า ก็จะสร้างขึ้นมาให้เช่นกัน และอีกเรื่องคือการเช็คว่าเป็น JSONClass เปล่าๆ หรือ JSONArray เปล่าๆหรือไม่ ถ้าเช็คไม่ครบก็จะผิดเงื่อนไขเอาง่ายๆ
- เรามาเริ่มที่เรื่องแรกก่อน
สิ่งที่ควรหลีกเลี่ยงเลยคือการใช้ .Asใดๆ (หลังจากนี้จะใช้ .AsInt เป็นหลัก) เพื่อดึงค่าตัวเลขที่เราไม่แน่ใจว่ามี index นี้หรือยัง จะทำให้ข้อมูลผิดพลาด
แบบที่ควรหลีกเลี่ยง
JSONNode test = new JSONClass();
int id = test["id"].AsInt; //จะทำให้ index ที่ชื่อ id เป็น 0 ทั้งๆที่ไม่เคยกำหนดค่ามาก่อน
if (test["number_id"].AsInt >= 0){
//ถ้าเช็คแบบนี้เงื่อนไขนี้จะถูกเสมอเพราะโดนกำหนดค่า 0 ตอน .AsInt
}
สิ่งที่ควรทำ
JSONNode test = new JSONClass();
int id = -1;
if (test["id"] != null)
id = test["id"].AsInt //จะทำให้ id ถูกต้องโดยจะเป็น -1 ถ้าไม่มี index ดังกล่าว
if (test["number_id"] !=null && test["number_id"].AsInt >= 0){
//ถ้าเช็คแบบนี้เงื่อนไขนี้จะไม่พลาดเข้าเงื่อนไขเมื่อไม่ได้กำหนด index number_id มา
}
- ถัดมาเรื่องการเช็ค JSONArray และ JSONClass เปล่า ทั้งคู่นี้ใช้การเช็ค Empty ต่างกัน
JSONArray testArray = new JSONArray();
//ใช้
if (testArray.AsObject == null)
JSONClass testObject = new JSONClass();
//ใช้
testObject.AsObject != null && testObject.AsObject.Count > 0
จากที่เห็นผิดนิดเดียวก็เกิดบั๊คกระจุยกระจายได้ ดังนั้นระมัดระวังกันด้วยนะครับ SimpleJSON ใช้ง่าย บั๊คก็ง๊ายง่ายเช่นกัน
Enjoy this article?
Consider subscribing to our RSS feed!
ไม่มีความเห็น
ยังไม่มีความเห็น