วันศุกร์ที่ 15 ตุลาคม พ.ศ. 2553

ความรู้เกี่ยวกับ json

  1. json เอาไว้ใช้แปลงข้อมูลไปมาระหว่างภาษาน่ะ
    มันเป็นข้อมูลที่อยู่ในรูปแบบ javascript object notation ซึ่งในภาษาต่างๆ สร้างคำสั่งสำหรับแปลง json
    ให้อยู่ในรูปแบบโครงสร้างข้อมูลในภาษานั้นๆได้โดยตรง เลยอย่างเช่น array, object, string ฯลฯ
    แต่ถ้า xml จะเป็น tag ธรรมดาๆ ซึ่งไม่มีความเกี่ยวข้องกับโครงสร้างข้อมูลในภาษาต่างๆ อย่าง array หรือ object เลย
    เวลาใช้ก็เลยต้องไล่ parse tag xml จากนั้นค่อยนำมาแปลงกลับเป็น array หรือ object
    ซึ่งถ้าไม่นับรวมการใช้ xml มาใช้ในการจัดเก็บข้อมูลซึ่ง xml มีโครงสร้างเหมือนฐานข้อมูลมากกว่าทำให้ง่ายในการ search
    ในการแลกเปลี่ยนข้อมูลระหว่างภาษา อย่างเช่น javascript และ php, xml จะใช้ยากกว่า json ครับ
    เรื่องนิยามและรายละเอียดต่างๆ อ่านที่ เว็บไซท์ json.org ละกันครับ :)

    เนื่องจากมันเป็น string ธรรมดาๆ ทำให้สามารถนำตัวแปร แปลงเป็น json แล้วเก็บใน text file ได้เลยง่ายต่อการใช้อย่างมากเช่น

    file_put_contents('test.txt',json_encode(array('test','test2')));

    เวลาจะเอาตัวแปรมาใช้ก็

    $array = json_decode(file_get_contents('test.txt'));

    ซึ่งจะดีกว่า serailize() ของ php ตรงที่ test.txt นี่เป็นข้อมูลที่สามารถแปลงเป็นโครงสร้างข้อมูลในภาษาอื่นๆ ได้เกือบทุกภาษา :D


  2. ใน json ถึงแม้ว่าพอจะทำให้เป็น ansi หรือ tis620 ได้แต่ก็ไม่นิยมทำกันจะทำให้เป็น utf8 มากกว่าครับ
    ดังนั้นในการแปลงข้อมูลภาษาไทยจะต้องแปลงให้เป็น utf8 ก่อนครับ
    แง่บๆ พูดถึงในการแปลงข้อมูลใน php เป็น json นะแต่ใน javascript รูปแบบการจัดเก็บไม่รู้เป็นเป็น utf8 utf16 หรืออะไรก็ไม่รู้

    echo json_encode(array('ภาษาไทย','test2'));

    เวลา save ไฟล์โค้ด php นี้จะต้องเซฟเป็น utf8 ครับ
    แต่ถ้าเซฟไฟล์ php นี้เป็น ansi ก็จะต้องแปลงข้อมูลก่อนเช่น

    echo json_encode(array(iconv('TIS-620','UTF-8','ภาษาไทย'),'test2'));



  3. ในการใช้กับ ajax ก็ควรจะระบุ header เป็น utf8 ด้วยครับ :D

    <?php
    header('Content-type:application/json;charset=utf-8');
    echo json_encode(array('ภาษาไทย','test2'));

    สำหรับฝั่ง javascript สมมุติได้รับข้อมูลมาจากการ request ajax แล้วก็ให้ทำการ eval ตัวแปรครับ

    eval('var data = '+responseText+';');

    ก็จะได้ข้อมูลมาใช้งานครับ alert(data[0]+','+data[1]);
    พอดี javascript , json เป็นโครงสร้างข้อมูลของภาษาโดยตรงเลยใช้ eval ได้เลยครับ
    ถ้าเป็นภาษาอื่นๆ จะมี function decode json string อีกทีหนึ่งครับ

    ถึงแม้ว่าตอนเริ่มต้นข้อมูลของเราจะเป็น utf8 แต่เราสามารถใช้ข้อมูลที่ได้รับจาก php
    ในไฟล์ html ที่เป็น tis620 หรือ windows874 ได้ครับ เนื่องจากการข้อมูลที่ได้รับเมื่อมาอยู่ในรูป javascript
    จะถูก browser แปลง encoding ให้ตาม encoding ของหน้านั้นโดยอัตโนมัติครับ
    ตัวอย่างเช่นหน้าที่ระบุ charset โดยใช้
    <meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
    ก็ใช้ข้อมูลจาก

    <?php
    header('Content-type:application/json;charset=utf-8');
    echo json_encode(array('ภาษาไทย','test2'));

    ได้เลย โดยไม่ต้องแปลง encoding ครับ


  4. serialize() ใน jquery จะดึงเอาข้อมูลใน form ให้อยู่ในรูปแบบ input1=1&input2=2&input3=3 ครับ

    $.ajax({
    type: 'get',
    url: 'test.php',
    data: $('#formid').serialize()
    });
    //$('#formid').serialize() ก็คือข้อมูล input1=1&input2=2&input3=3 ครับ


    ใน key data ของคำสั่งยังสามารถส่งค่าเป็น object ได้ด้วยครับ

    $.ajax({
    type: 'get',
    url: 'test.php',
    data: {input1:1,input2:2,input3:3}
    });

    data: ซึ่งตรงนี้ {input1:1,input2:2,input3:3} ซึ่งเป็นผลลัพธ์ก็จะถูกแปลงเป็น input1=1&input2=2&input3=3 อีกทีหนึ่งครับ

    สำหรับ jquery จะมีคำสั่งในการแปลง json string จาก server มาเป็นโครงสร้างข้อมูล javascript ครับ (รู้สึกจะใช้ eval)

    $.ajax({
    url:'test.php',
    type:'GET',
    dataType:'json',
    success:function(e){
    alert(e[0]+','+e[1]); //ข้อมูล json ถูกแปลงเป็นโครงสร้างข้อมูลใน javascript แล้ว
    }
    });

    แต่ในการแปลงข้อมูลให้อยู่ในรูปแบบ json เพื่อส่งไปยัง server ตรง jquery ยังไม่มีคำสั่งนี้ครับ
    แต่ก็มีคนสร้าง jquery plugin สำหรับแปลงโครงสร้างข้อมูล javascript ไปเป็น json string ไว้แล้วครับ



อ่านเพิ่มเติมได้ที่
http://www.thaicreate.com/php/forum/032712.html

ไม่มีความคิดเห็น:

แสดงความคิดเห็น