16 เมษายน 2558

Published เมษายน 16, 2558 by with 1 comment

Python กับ JSON

สวัสดีผู้อ่านทุกท่านครับ บทความนี้จะพาผู้อ่านไปเรียนรู้การใช้งาน Python กับ JSON กันครับ


JSON ย่อมาจาก JavaScript Object Notation (ภาษาไทยอ่านว่า เจซัน) เป็นฟอร์แมตหนึ่งที่ใช้ในการรับส่งข้อมูลและเป็นที่นิยมกันอย่างมากในปัจจุบัน เพราะโครงสร้างของ JSON ถูกออกแบบมาให้มีความกระชับ เข้าใจง่ายกว่า XML

ในภาษา Python ได้มีการรองรับ JSON มานานแล้ว โดยการรองรับเป็นไปตาม RFC 7159 ครับ

เข้ารหัสและถอดรหัส JSON
มีอยู่สองคำสั่งต่อไปนี้ครับ

  • คำสั่งเข้ารหัสข้อมูลเป็น JSON คือ json.dumps()

  • คำสั่งถอดรหัสจาก JSON เป็นข้อมูลของ Python คือ json.loads()
>>> import json
>>> data = json.dumps([1,2,3,{'4': 5, '6': 7}]) #เข้ารหัส
>>> print(data)
[1,2,3,{"6":7,"4":5}]
>>> data1 = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4 * ' ')
>>>> print(data1)
{
"4": 5,
"6": 7
}
>>> json.loads(data) #ถอดรหัส
[1, 2, 3, {'4': 5, '6': 7}]
>>> json.loads(data1)
{'6': 7, '4': 5}

ทำ Parse JSON ใน Python
เราสามารถทำ Parse JSON ได้ง่าย ๆ โดยตามตัวอย่างต่อไปนี้ครับ
import json
j = json.loads('{"one" : "1", "two" : "2", "three" : "3"}')
print(j['two'])

ผลลัพธ์
2
จะเห็นได้ว่า การทำ Parse JSON คล้าย ๆ กับการเรียกใช้งานข้อมูลชนิด Dictionary ของ Python ครับ


ปัญหาภาษาไทยกับ json.dumps()
ในกรณีที่ใช้ภาษาไทยเช่น
x = [ {'ไก่':2,'จิก':2,'เด็ก':2} , {'ไข่': 3,'ขวด':3}]
print(json.dumps(x))
ผลลัพธ์ ออกมาเป็น
[{"\\u0e40\\u0e14\\u0e47\\u0e01": 2, "\\u0e08\\u0e34\\u0e01": 2, "\\u0e44\\u0e01\\u0e48": 2}, {"\\u0e44\\u0e02\\u0e48": 3, "\\u0e02\\u0e27\\u0e14": 3}]
ทางแก้ไข
ให้ใส่ ensure_ascii=False ลงไปในคำสั่ง json.dumps() ได้เป็น
json.dumps(x, ensure_ascii=False)
เดติด : https://www.facebook.com/groups/admin.py.dev/permalink/527543330764208/


ในกรณีที่มีการดึงไฟล์ json จากอินเทอร์เน็ตมาใช้งาน ต้องแปลงชนิดข้อมูลที่ได้ให้เป็นสตริง (str) ก่อนใช้คำสั่ง json.loads() ครับ

ติดตามบทความต่อไปครับ
ขอบคุณครับ

1 ความคิดเห็น:

  1. แล้วเวลาดึงไฟล์ json ลงมาจาก internet ต้องทำยังไงหรอครับ?

    ตอบลบ

แสดงความคิดเห็นได้ครับ :)