กลับไปหน้าบทความ

อ่าน 16 นาที

เจซอน

JSON ( JavaScript Object Notation , ออกเสียงว่า / ˈdʒeɪsən / หรือ / ˈdʒeɪˌsɒn / ) เป็น รูป แบบ ไฟล์ มาตรฐานแบบเปิด และ รูป แบบ การ แลกเปลี่ยนข้อมูล ที่ใช้ ข้อความ ที่มนุษย์อ่านได้...

เจซอน

ตรวจสอบแล้ว
หน้าเว็บได้รับการป้องกันบางส่วน

สัญกรณ์วัตถุ JavaScript
โลโก้ JSON คือแถบโมเบียส
โลโก้ JSON คือแถบโมเบีย
นามสกุลไฟล์
.json
สื่อประเภทอินเทอร์เน็ต
แอปพลิเคชัน/เจซัน
รหัสประเภทข้อความ
ตัวระบุประเภทมาตรฐาน (UTI)สาธารณะ.เจซอน
ประเภทของรูปแบบการแลกเปลี่ยนข้อมูล
ขยายจากโค้ด JavaScript
มาตรฐานSTD 90 ( RFC  8259 ), ECMA-404 , ISO/IEC 21778:2017
รูปแบบเปิด ?ใช่
เว็บไซต์json.org

JSON ( JavaScript Object Notation , ออกเสียงว่า/ ˈdʒeɪsən /หรือ/ ˈdʒeɪˌsɒn / ) เป็นรูปแบบไฟล์มาตรฐานแบบเปิดและรูปแบบการแลกเปลี่ยนข้อมูลที่ใช้ ข้อความ ที่มนุษย์อ่านได้ ในการ จัด เก็บและ ส่งวัตถุข้อมูลที่ประกอบด้วยคู่ชื่อ-ค่าและอาร์เรย์ (หรือ ค่า ที่สามารถแปลงเป็นรูปแบบอนุกรมได้ อื่นๆ) เป็นรูปแบบข้อมูลที่ใช้กันทั่วไปและมีการใช้งานที่หลากหลายในการแลกเปลี่ยนข้อมูลทางอิเล็กทรอนิกส์รวมถึง แอ ป พลิเคชันเว็บกับเซิร์ฟเวอร์

JSON เป็น รูปแบบข้อมูล ที่ไม่ขึ้นกับภาษาโปรแกรมใดๆมันพัฒนามาจากJavaScriptแต่ภาษาโปรแกรม สมัยใหม่หลายภาษา มีโค้ดสำหรับสร้างและแยกวิเคราะห์ข้อมูลในรูปแบบ JSON ชื่อไฟล์ JSON ใช้ส่วนขยาย.json. json

Douglas Crockfordเป็นผู้กำหนดรูปแบบ JSON ในช่วงต้นทศวรรษ 2000 [ 1 ]พวกเขา[ a ] ​​และChip Morningstarส่งข้อความ JSON แรกในเดือนเมษายน 2001

การตั้งชื่อและการออกเสียง

มาตรฐานสากลปี 2017 (ECMA-404 และ ISO/IEC 21778:2017) ระบุว่า "JSON" ออกเสียงว่า " / ˈ . s ə n /เหมือนกับใน ' Jason and The Argonauts ' " [ 3 ] [ 4 ] ECMA-404 ฉบับแรก (2013) ไม่ได้กล่าวถึงการออกเสียง[ 5 ] Crockford กล่าวในปี 2011 ว่า "มีการถกเถียงกันมากมายเกี่ยวกับการออกเสียง แต่ฉันไม่สนใจเลย" [ 1 ] / ˈ ˌ s ɒ n /เป็นการออกเสียงอีกแบบหนึ่งที่นิยมใช้[ 6 ]

มาตรฐาน

หลังจากที่ RFC 4627 ได้ถูกเผยแพร่เป็นข้อกำหนด "เชิงข้อมูล" ตั้งแต่ปี 2006 JSON ได้รับการกำหนดมาตรฐานครั้งแรกในปี 2013 ในชื่อECMA -404 [ 5 ] RFC 8259 ซึ่งเผยแพร่ในปี 2017 เป็นเวอร์ชันปัจจุบันของมาตรฐานอินเทอร์เน็ต STD 90 และยังคงสอดคล้องกับ ECMA-404 [ 7 ]ในปีเดียวกันนั้น JSON ยังได้รับการกำหนดมาตรฐานเป็นISO/IEC 21778:2017 อีกด้วย [ 3 ] มาตรฐาน ECMA และISO/IEC อธิบายเฉพาะไวยากรณ์ที่อนุญาต ในขณะที่ RFC ครอบคลุมถึงข้อควร พิจารณาด้านความปลอดภัยและการทำงานร่วมกันบางประการ[ 8 ]

ประวัติศาสตร์

ดักลาส คร็อกฟอร์ด ที่อาคารยาฮู (2007)

JSON เกิดขึ้นจากความต้องการโปรโตคอลการสื่อสารแบบเรียลไทม์ระหว่างเซิร์ฟเวอร์กับเบราว์เซอร์โดยไม่ต้องใช้ปลั๊กอินเบราว์เซอร์ เช่นFlashหรือJava applets ซึ่งเป็นวิธีการหลักที่ใช้ในช่วงต้นทศวรรษ 2000 [ 9 ]

Crockford เป็นผู้กำหนดและทำให้รูปแบบ JSON เป็นที่นิยมเป็นครั้งแรก[ 1 ]คำย่อนี้มีต้นกำเนิดมาจาก State Software บริษัทที่ Crockford และคนอื่นๆ ร่วมก่อตั้งขึ้นในเดือนมีนาคม พ.ศ. 2544 ผู้ร่วมก่อตั้งตกลงที่จะสร้างระบบที่ใช้ความสามารถมาตรฐานของเบราว์เซอร์และจัดเตรียมเลเยอร์นามธรรมสำหรับนักพัฒนาเว็บเพื่อสร้างเว็บแอปพลิเคชันที่มีสถานะซึ่งมีการเชื่อมต่อแบบสองทิศทางที่คงที่กับเว็บเซิร์ฟเวอร์โดยการเปิด การเชื่อมต่อ Hypertext Transfer Protocol (HTTP) สองรายการและนำกลับมาใช้ใหม่ก่อนที่เบราว์เซอร์จะหมดเวลาตามปกติหากไม่มีการแลกเปลี่ยนข้อมูลเพิ่มเติม ผู้ร่วมก่อตั้งได้มีการหารือกันและลงคะแนนเสียงว่าจะเรียกรูปแบบข้อมูลนี้ว่าJSML (JavaScript Markup Language) หรือ JSON (JavaScript Object Notation) รวมถึง ประเภท ใบอนุญาตที่จะเปิดให้ใช้งาน เว็บไซต์ JSON.org [ 10 ]เปิดตัวในปี พ.ศ. 2544 ในเดือนธันวาคม พ.ศ. 2548 Yahoo! เริ่มให้ บริการเว็บบางส่วนในรูปแบบ JSON [ 11 ]

ต้นกำเนิดของไลบรารี JSON ถูกนำไปใช้ในโครงการเกมซื้อขายสินทรัพย์ดิจิทัลสำหรับเด็กชื่อCartoon Orbitที่ Communities.com ซึ่งใช้ปลั๊กอินฝั่งเบราว์เซอร์ที่มีรูปแบบการส่งข้อความเฉพาะเพื่อจัดการ องค์ประกอบ DHTMLเมื่อค้นพบ ความสามารถ ของ Ajax ในยุคแรกๆ digiGroups, Noosh และบริษัทอื่นๆ ได้ใช้เฟรมเพื่อส่งข้อมูลไปยังพื้นที่แสดงผลของเบราว์เซอร์ของผู้ใช้โดยไม่ต้องรีเฟรชบริบทการแสดงผลของเว็บแอปพลิเคชัน ทำให้เกิดเว็บแอปพลิเคชันแบบเรียลไทม์ที่มีฟังก์ชันการทำงานมากมายโดยใช้เพียงความสามารถมาตรฐานของ HTTP, HTML และ JavaScript ของ Netscape 4.0.5+ และ Internet Explorer 5+ ต่อมา Crockford พบว่า JavaScript สามารถใช้เป็นรูปแบบการส่งข้อความแบบอิงวัตถุสำหรับระบบดังกล่าวได้ ระบบนี้ถูกขายให้กับSun Microsystems , Amazon.comและEDS

JSON สร้างขึ้นจากชุดย่อยของ ภาษาสคริปต์ JavaScript (โดยเฉพาะมาตรฐานECMA -262 ฉบับที่ 3—ธันวาคม 1999 [ 12 ] ) และมักใช้กับ JavaScript แต่เป็น รูปแบบข้อมูล ที่ไม่ขึ้นกับภาษาโค้ดสำหรับการแยกวิเคราะห์และสร้างข้อมูล JSON นั้นมีให้ใช้งานได้ง่ายในภาษาโปรแกรม หลายภาษา เว็บไซต์ของ JSON แสดงรายการ ไลบรารี JSON ตามภาษา

ในเดือนตุลาคม พ.ศ. 2556 Ecma Internationalได้เผยแพร่มาตรฐาน JSON ฉบับแรก ECMA-404 [ 5 ]ในปีเดียวกันนั้นRFC 7158ได้ใช้ ECMA-404 เป็นข้อมูลอ้างอิง ในปี พ.ศ. 2557 RFC 7159กลายเป็นข้อมูลอ้างอิงหลักสำหรับการใช้งาน JSON บนอินเทอร์เน็ต โดยแทนที่RFC 4627และRFC 7158 (แต่ยังคงใช้ ECMA-262 และ ECMA-404 เป็นข้อมูลอ้างอิงหลัก) ในเดือนพฤศจิกายน พ.ศ. 2560 ISO/IEC JTC 1/SC 22ได้เผยแพร่ ISO/IEC 21778:2017 [ 3 ]เป็นมาตรฐานสากล ในวันที่ 13 ธันวาคม พ.ศ. 2560 Internet Engineering Task Forceได้ยกเลิกRFC 7159เมื่อได้เผยแพร่RFC 8259 ซึ่งเป็น มาตรฐานอินเทอร์เน็ตเวอร์ชันปัจจุบันSTD 90 [ 7 ]      

คร็อกฟอร์ดได้เพิ่มข้อความในใบอนุญาต JSON โดยระบุว่า "ซอฟต์แวร์จะต้องใช้เพื่อสิ่งที่ดี ไม่ใช่สิ่งชั่วร้าย" เพื่อเปิดเผยไลบรารี JSON เป็นโอเพนซอร์ส ในขณะเดียวกันก็เป็นการเยาะเย้ยทนายความของบริษัทและผู้ที่จู้จี้จุกจิกเกินไป ในทางกลับกัน ข้อความนี้ทำให้เกิด ปัญหา ความเข้ากันได้ ของใบอนุญาต JSON กับใบอนุญาต โอเพนซอร์สอื่นๆเนื่องจากซอฟต์แวร์โอเพนซอร์สและซอฟต์แวร์ฟรีมักไม่ได้หมายความถึงข้อจำกัดใดๆ เกี่ยวกับวัตถุประสงค์ในการใช้งาน[ 13 ]

ไวยากรณ์

ตัวอย่างต่อไปนี้แสดงรูปแบบ JSON ที่เป็นไปได้ซึ่งใช้อธิบายลักษณะของบุคคล

{ "first_name" : "John" , "last_name" : "Smith" , "is_alive" : true , "age" : 27 , "address" : { "street_address" : "21 2nd Street" , "city" : "New York" , "state" : "NY" , "postal_code" : "10021-3100" }, "phone_numbers" : [ { "type" : "home" , "number" : "212 555-1234" }, { "type" : "office" , "number" : "646 555-4567" } ], "children" : [ "Catherine" , "Thomas" , "Trevor" ], "spouse" : null }

การเข้ารหัสอักขระ

แม้ว่า Crockford จะยืนยันในตอนแรกว่า JSON เป็นส่วนย่อยที่เข้มงวดของJavaScriptและECMAScript [ 14 ] แต่ข้อกำหนดของพวกเขาก็อนุญาตให้เอกสาร JSON ที่ถูกต้องซึ่งไม่ใช่ JavaScript ที่ถูกต้องได้ JSON อนุญาตให้ตัวจบบรรทัด Unicode U+2028 LINE SEPARATORและU+2029 PARAGRAPH SEPARATORปรากฏโดยไม่ต้องหลีกเลี่ยงในสตริงที่อยู่ในเครื่องหมายคำพูด ในขณะที่ ECMAScript 2018 และเวอร์ชันเก่ากว่าไม่อนุญาต[ 15 ] [ 16 ]นี่เป็นผลมาจากการที่ JSON ไม่อนุญาตให้ใช้เฉพาะ "อักขระควบคุม" เท่านั้น เพื่อให้สามารถพกพาได้สูงสุด อักขระเหล่านี้จึงถูกหลีกเลี่ยงด้วยเครื่องหมายแบ็กสแลช

การแลกเปลี่ยน JSON ในระบบนิเวศแบบเปิดจะต้องเข้ารหัสด้วยUTF-8 [ 7 ] การเข้ารหัสนี้รองรับชุดอักขระ Unicode ทั้งหมด รวมถึงอักขระที่อยู่นอกBasic Multilingual Plane (U+0000 ถึง U+FFFF) อย่างไรก็ตาม หากมีการหลีกเลี่ยง อักขระเหล่านั้นจะต้องเขียนโดยใช้คู่ตัวแทน UTF-16ตัวอย่างเช่น เพื่อรวมอักขระEmoji U+1F610 😐 NEUTRAL FACEใน JSON:

{ "สีหน้า" : "😐" }

หรือ:

{ "face" : "\uD83D\uDE10" }

JSON กลายเป็นส่วนย่อยที่เข้มงวดของ ECMAScript นับตั้งแต่การแก้ไขภาษาในปี 2019 [ 16 ] [ 17 ]

ประเภทข้อมูล

ประเภทข้อมูลพื้นฐานของ JSON ได้แก่:

  • ตัวเลข: ตัวเลขทศนิยมที่มีเครื่องหมายซึ่งอาจมีส่วนที่เป็นเศษส่วนและอาจใช้สัญกรณ์เลขยกกำลัง Eแต่ไม่สามารถรวมสิ่งที่ไม่ใช่ตัวเลข เช่นNaNได้ รูปแบบนี้ไม่ได้แยกความแตกต่างระหว่างจำนวนเต็มและจุดลอยตัว JavaScript ใช้รูปแบบจุดลอยตัวความแม่นยำสองเท่าIEEE-754 สำหรับค่าตัวเลขทั้งหมด (ต่อมายังรองรับBigInt [ 18 ] ด้วย ) แต่ภาษาอื่นๆ ที่ใช้ JSON อาจเข้ารหัสตัวเลขแตกต่างกัน
  • สตริง : ลำดับของ อักขระ ยูนิโค้ด ตั้งแต่ ศูนย์ตัวขึ้นไปสตริงถูกคั่นด้วยเครื่องหมายอัญประกาศคู่ และรองรับไวยากรณ์การหลีกเลี่ยง อักขระด้วย แบ็กสแลช
  • บูลีน : ค่าใดค่าหนึ่งtrueต่อไปนี้false
  • อาร์เรย์ : รายการเรียงลำดับขององค์ประกอบตั้งแต่ศูนย์ตัวขึ้นไป โดยแต่ละองค์ประกอบอาจเป็นชนิดใดก็ได้ อาร์เรย์ใช้ สัญลักษณ์ วงเล็บเหลี่ยมโดยมีเครื่องหมายจุลภาคคั่นระหว่างองค์ประกอบ
  • ออบเจ็กต์ : ชุดของคู่ชื่อ-ค่าโดยที่ชื่อ (เรียกอีกอย่างว่าคีย์) เป็นสตริง มาตรฐาน ECMA ปัจจุบันระบุว่า "ไวยากรณ์ JSON ไม่ได้กำหนดข้อจำกัดใดๆ เกี่ยวกับสตริงที่ใช้เป็นชื่อ ไม่ได้กำหนดให้สตริงชื่อต้องไม่ซ้ำกัน และไม่ได้กำหนดความสำคัญใดๆ ให้กับการเรียงลำดับของคู่ชื่อ/ค่า" [ 19 ]ออบเจ็กต์จะถูกคั่นด้วยวงเล็บปีกกาและใช้เครื่องหมายจุลภาคเพื่อแยกแต่ละคู่ ในขณะที่ภายในแต่ละคู่ อักขระโคลอน ":" จะแยกคีย์หรือชื่อออกจากค่า
  • null: ค่าว่างเปล่า โดยใช้คำว่าnull

อนุญาตให้มีช่องว่าง และจะถูกละเว้นรอบๆ หรือระหว่างองค์ประกอบทางไวยากรณ์ (ค่าและเครื่องหมายวรรคตอน แต่ไม่รวมถึงค่าสตริง) อักขระเฉพาะสี่ตัวถือเป็นช่องว่างสำหรับวัตถุประสงค์นี้ ได้แก่ ช่องว่างแท็บแนวนอน การขึ้นบรรทัดใหม่และการขึ้นต้นบรรทัดใหม่โดยเฉพาะอย่างยิ่งเครื่องหมายลำดับไบต์ต้องไม่ถูกสร้างขึ้นโดยการใช้งานที่สอดคล้อง (แม้ว่าจะอาจยอมรับได้เมื่อแยกวิเคราะห์ JSON) JSON ไม่ได้ให้ไวยากรณ์สำหรับความคิดเห็น[ 20 ]

JSON เวอร์ชันแรกๆ (เช่นที่ระบุไว้ในRFC 4627 ) กำหนดว่าข้อความ JSON ที่ถูกต้องจะต้องประกอบด้วยประเภทอ็อบเจ็กต์หรืออาร์เรย์เท่านั้น ซึ่งอาจมีประเภทอื่นๆ อยู่ภายในได้ ข้อจำกัดนี้ถูกยกเลิกในRFC 7158ซึ่งข้อความ JSON ถูกกำหนดใหม่ให้เป็นค่าใดๆ ก็ได้ที่ถูกแปลงเป็นรูปแบบอนุกรม (serialized value)   

ตัวเลขใน JSON ไม่ขึ้นอยู่กับรูปแบบการแสดงผลในภาษาโปรแกรม แม้ว่าวิธีนี้จะช่วยให้สามารถแปลง ตัวเลขที่ มีความแม่นยำตามอำเภอใจได้42 แต่ก็อาจนำไปสู่ปัญหาเรื่องความเข้ากันได้ ตัวอย่างเช่น เนื่องจากไม่มีการแยกความแตกต่างระหว่างค่าจำนวนเต็มและค่าทศนิยม การใช้งานบางอย่างอาจถือว่า , 42.0, และ4.2E+1เป็นตัวเลขเดียวกัน ในขณะที่การใช้งานอื่นๆ อาจไม่เป็นเช่นนั้น มาตรฐาน JSON ไม่ได้กำหนดข้อกำหนดใดๆ เกี่ยวกับรายละเอียดการใช้งาน เช่นการล้น การน้อยเกินไปการสูญเสียความแม่นยำ การปัดเศษ หรือศูนย์ที่มีเครื่องหมายแต่แนะนำให้คาดหวังความแม่นยำไม่เกินIEEE 754 binary64เพื่อ "ความสามารถในการทำงานร่วมกันที่ดี" ไม่มีการสูญเสียความแม่นยำโดยธรรมชาติในการแปลงการแสดงผลแบบไบนารีระดับเครื่องของตัวเลขทศนิยม (เช่น binary64) ไปเป็นการแสดงผลแบบทศนิยมที่มนุษย์อ่านได้ (เช่น ตัวเลขใน JSON) และกลับกัน มีอัลกอริทึมที่เผยแพร่แล้วสำหรับการแปลงนี้อย่างแม่นยำและเหมาะสมที่สุด[ 21 ]

ความคิดเห็นถูกแยกออกจาก JSON โดยเจตนา ในปี 2012 Douglas Crockford ได้อธิบายการตัดสินใจด้านการออกแบบของพวกเขาไว้ดังนี้: "ฉันลบความคิดเห็นออกจาก JSON เพราะฉันเห็นว่าผู้คนใช้ความคิดเห็นเหล่านั้นเพื่อเก็บคำสั่งการแยกวิเคราะห์ ซึ่งเป็นวิธีปฏิบัติที่จะทำลายความสามารถในการทำงานร่วมกัน" [ 20 ]

JSON ไม่อนุญาตให้มี "เครื่องหมายจุลภาคท้าย" ซึ่งเป็นเครื่องหมายจุลภาคหลังค่าสุดท้ายภายในโครงสร้างข้อมูล[ 22 ]เครื่องหมายจุลภาคท้ายเป็นคุณลักษณะทั่วไปของอนุพันธ์ JSONเพื่อปรับปรุงความสะดวกในการใช้งาน[ 23 ]

ความสามารถในการทำงานร่วมกัน

RFC  8259 อธิบายถึงลักษณะบางประการของไวยากรณ์ JSON ซึ่งถึงแม้จะถูกต้องตามข้อกำหนด แต่ก็อาจก่อให้เกิดปัญหาในการทำงานร่วมกันได้

  • การใช้งาน JSON บางรูปแบบยอมรับเฉพาะข้อความ JSON ที่แสดงถึงอ็อบเจ็กต์หรืออาร์เรย์เท่านั้น เพื่อให้สามารถทำงานร่วมกันได้ แอปพลิเคชันที่แลกเปลี่ยนข้อมูล JSON ควรส่งข้อความที่เป็นอ็อบเจ็กต์หรืออาร์เรย์
  • ข้อกำหนดอนุญาตให้ใช้ JSON object ที่มีสมาชิกหลายตัวที่มีชื่อเดียวกันได้ อย่างไรก็ตาม พฤติกรรมของโปรแกรมที่ประมวลผล object ที่มีชื่อซ้ำกันนั้นคาดเดาไม่ได้ เพื่อให้สามารถทำงานร่วมกันได้ แอปพลิเคชันควรหลีกเลี่ยงการใช้ชื่อซ้ำกันเมื่อส่ง JSON object
  • ข้อกำหนดระบุไว้อย่างชัดเจนว่าลำดับของสมาชิกในออบเจ็กต์ JSON นั้นไม่สำคัญ เพื่อให้สามารถทำงานร่วมกันได้ แอปพลิเคชันควรหลีกเลี่ยงการกำหนดความหมายให้กับลำดับของสมาชิก แม้ว่าซอฟต์แวร์การแยกวิเคราะห์จะทำให้ลำดับนั้นปรากฏให้เห็นก็ตาม
  • แม้ว่าข้อกำหนดจะไม่ได้จำกัดขนาดหรือความแม่นยำของตัวเลข JSON แต่การใช้งาน JavaScript ที่ใช้กันอย่างแพร่หลายจะจัดเก็บตัวเลขเหล่านั้นในรูปแบบ "binary64" ของ IEEE754 เพื่อให้สามารถทำงานร่วมกันได้ แอปพลิเคชันควรหลีกเลี่ยงการส่งตัวเลขที่ไม่สามารถแสดงในรูปแบบนี้ได้ เช่น 1E400 หรือ 3.141592653589793238462643383279
  • แม้ว่าข้อกำหนดจะไม่ได้จำกัดการเข้ารหัสอักขระของอักขระ Unicode ในข้อความ JSON แต่การใช้งานส่วนใหญ่จะถือว่า ใช้การเข้ารหัส UTF-8เพื่อให้สามารถทำงานร่วมกันได้ แอปพลิเคชันควรเข้ารหัสข้อความ JSON ด้วย UTF-8 เสมอ
  • ข้อกำหนดไม่ได้ห้ามการส่งลำดับไบต์ที่แสดงอักขระยูนิโค้ดอย่างไม่ถูกต้อง เพื่อให้สามารถทำงานร่วมกันได้ แอปพลิเคชันควรส่งข้อความที่ไม่มีลำดับไบต์ดังกล่าว
  • ข้อกำหนดไม่ได้จำกัดวิธีการที่แอปพลิเคชันจะใช้ในการเปรียบเทียบสตริง Unicode เพื่อให้สามารถทำงานร่วมกันได้ แอปพลิเคชันควรทำการเปรียบเทียบดังกล่าวทีละหน่วยรหัสเสมอ

ในปี 2015 IETF ได้เผยแพร่RFC 7493ซึ่งอธิบายถึง "รูปแบบข้อความ I-JSON" ซึ่งเป็นรูปแบบ JSON ที่จำกัดไวยากรณ์และการประมวลผลของ JSON เพื่อหลีกเลี่ยงปัญหาการทำงานร่วมกันให้มากที่สุดเท่าที่จะเป็นไปได้  

ความหมาย

แม้ว่า JSON จะมีกรอบไวยากรณ์สำหรับการแลกเปลี่ยนข้อมูล แต่การแลกเปลี่ยนข้อมูลที่ไม่คลุมเครือยังต้องอาศัยข้อตกลงระหว่างผู้ผลิตและผู้บริโภคเกี่ยวกับความหมายของการใช้ไวยากรณ์ JSON ที่เฉพาะเจาะจงด้วย[ 24 ] ตัวอย่างหนึ่งที่จำเป็นต้องมีข้อตกลงดังกล่าวคือการแปลงข้อมูลประเภทที่ไม่ใช่ส่วนหนึ่งของมาตรฐาน JSON เช่น วันที่และนิพจน์ปกติ

เมตาเดตาและสคีมา

ประเภท MIMEอย่างเป็นทางการสำหรับข้อความ JSON คือapplication/json[ 25 ] และการใช้งานสมัยใหม่ส่วนใหญ่ได้นำสิ่งนี้มาใช้ ประเภท MIME แบบดั้งเดิม ได้แก่,text/json , text/x-jsonและ[ 26text/javascript ] นามสกุลไฟล์ มาตรฐานคือ .json [ 27 ]

JSON Schemaกำหนดรูปแบบที่ใช้ JSON เพื่อกำหนดโครงสร้างของข้อมูล JSON สำหรับการตรวจสอบความถูกต้อง การจัดทำเอกสาร และการควบคุมการโต้ตอบ โดยให้สัญญาสำหรับข้อมูล JSON ที่แอปพลิเคชันที่กำหนดต้องการ และวิธีการแก้ไขข้อมูลนั้น[ 28 ] JSON Schema อิงตามแนวคิดจากXML Schema (XSD) แต่ใช้ JSON เป็นพื้นฐาน เช่นเดียวกับใน XSD เครื่องมือการซีเรียลไลซ์/ดีซีเรียลไลซ์เดียวกันสามารถใช้ได้ทั้งกับสคีมาและข้อมูล และสามารถอธิบายตัวเองได้ มีการกำหนดไว้ในร่างเอกสารอินเทอร์เน็ตที่ IETF โดยเวอร์ชันล่าสุด ณ ปี 2024 คือ "Draft 2020-12" [ 29 ]มีตัวตรวจสอบความถูกต้องหลายตัวสำหรับภาษาการเขียนโปรแกรมต่างๆ[ 30 ]แต่ละตัวมีระดับความสอดคล้องที่แตกต่างกัน

มาตรฐาน JSON ไม่รองรับการอ้างอิง วัตถุ แต่ มีร่างมาตรฐาน IETFสำหรับการอ้างอิงวัตถุแบบ JSON อยู่แล้ว[ 31 ]

การใช้งาน

JSON-RPCเป็น โปรโตคอล การเรียกใช้ฟังก์ชันระยะไกล (RPC) ที่สร้างขึ้นบน JSON โดยใช้แทนXML-RPCหรือSOAPเป็นโปรโตคอลที่เรียบง่ายซึ่งกำหนดเฉพาะประเภทข้อมูลและคำสั่งเพียงไม่กี่อย่าง JSON-RPC ช่วยให้ระบบสามารถส่งการแจ้งเตือน (ข้อมูลไปยังเซิร์ฟเวอร์ที่ไม่ต้องการการตอบกลับ) และการเรียกใช้หลายรายการไปยังเซิร์ฟเวอร์ซึ่งสามารถตอบกลับได้โดยไม่เรียงลำดับ

JavaScript แบบอะซิงโครนัสและ JSON (หรือ AJAJ) หมายถึงวิธีการสร้างเว็บเพจแบบไดนามิก เช่นเดียวกับ Ajaxแต่แทนที่จะใช้XMLจะใช้ JSON เป็นรูปแบบข้อมูล AJAJ เป็นเทคนิคการพัฒนาเว็บที่ช่วยให้เว็บเพจสามารถร้องขอข้อมูลใหม่ได้หลังจากที่โหลดเว็บเพจลงในเบราว์เซอร์แล้วโดยทั่วไปแล้ว AJAJ จะดึงข้อมูลใหม่จากเซิร์ฟเวอร์เพื่อตอบสนองต่อการกระทำของผู้ใช้บนเว็บเพจนั้น ตัวอย่างเช่น สิ่งที่ผู้ใช้พิมพ์ลงในช่องค้นหาโค้ดฝั่งไคลเอ็นต์จะส่งไปยังเซิร์ฟเวอร์ ซึ่งจะตอบกลับทันทีด้วยรายการแบบดรอปดาวน์ของรายการ ที่ตรงกัน จากฐานข้อมูล

JSON ถูกนำมา ใช้ ในลักษณะเฉพาะกิจใน ฐานะ ภาษาสำหรับการกำหนดค่าอย่างไรก็ตาม JSON ไม่รองรับความคิดเห็นในปี 2012 Douglas Crockford ผู้สร้าง JSON ได้กล่าวถึงความคิดเห็นใน JSON เมื่อใช้เป็นภาษาสำหรับการกำหนดค่าไว้ว่า: "ผมรู้ว่าการที่ไม่มีความคิดเห็นทำให้บางคนเสียใจ แต่ไม่ควรเป็นเช่นนั้น สมมติว่าคุณกำลังใช้ JSON เพื่อเก็บไฟล์การกำหนดค่าที่คุณต้องการใส่คำอธิบายประกอบ คุณสามารถใส่ความคิดเห็นทั้งหมดที่คุณต้องการได้ จากนั้นส่งผ่าน JSMin [ 32 ]ก่อนที่จะส่งไปยังตัวแยกวิเคราะห์ JSON ของคุณ" [ 20 ]

MongoDBใช้ข้อมูลที่มีลักษณะคล้าย JSON สำหรับฐานข้อมูลแบบเอกสาร ของ ตน

ฐานข้อมูลเชิงสัมพันธ์บางฐานข้อมูลได้เพิ่มการสนับสนุนสำหรับประเภทข้อมูล JSON ดั้งเดิม เช่น JSONB ใน PostgreSQL [ 33 ]และ JSON ใน MySQL [ 34 ]ซึ่งช่วยให้นักพัฒนาสามารถแทรกข้อมูล JSON ได้โดยตรงโดยไม่ต้องแปลงเป็นรูปแบบอื่น

ความปลอดภัย

เนื่องจาก JSON เป็นส่วนย่อยของ JavaScript จึงอาจทำให้เกิดความเข้าใจผิดว่าการส่งข้อความ JSON ไปยังeval()ฟังก์ชัน JavaScript นั้นปลอดภัย ซึ่งไม่ปลอดภัย เนื่องจากข้อความ JSON ที่ถูกต้องบางส่วน โดยเฉพาะอย่างยิ่งข้อความที่มีU+2028 LINE SEPARATORหรือU+2029 PARAGRAPH SEPARATORไม่ถือเป็นโค้ด JavaScript ที่ถูกต้อง จนกระทั่งข้อกำหนดของ JavaScript ได้รับการอัปเดตในปี 2019 ดังนั้นเอ็นจิ้นรุ่นเก่าอาจไม่รองรับ[ 35 ]เพื่อหลีกเลี่ยงข้อผิดพลาดมากมายที่เกิดจากการเรียกใช้โค้ดตามอำเภอใจจากอินเทอร์เน็ต ฟังก์ชันใหม่ได้ถูกเพิ่มเข้าไปใน ECMAScript รุ่นที่ห้าเป็นครั้งแรก[ 36 ] ซึ่งในปี 2017 ได้รับการสนับสนุนจากเบราว์เซอร์หลักทั้งหมด สำหรับเบราว์เซอร์ที่ไม่รองรับ Douglas Crockfordได้จัดเตรียมไลบรารี JavaScript ที่เข้ากันได้กับ API ไว้ให้[ 37 ]นอกจากนี้ ข้อเสนอ TC39 "Subsume JSON" ทำให้ECMAScriptเป็นซูเปอร์เซ็ต JSON ที่เข้มงวดตั้งแต่การแก้ไขภาษาในปี 2019 [ 16 ] [ 17 ] การใช้ งานตัวแยกวิเคราะห์ JSON ต่างๆ ได้รับผลกระทบจากการโจมตีแบบปฏิเสธการให้บริการและช่องโหว่การกำหนดจำนวนมาก[ 38 ] [ 39 ]JSON.parse()

ทางเลือกอื่นๆ

JSON ได้รับการส่งเสริมให้เป็นทางเลือกที่มีต้นทุนต่ำกว่า XML เนื่องจากทั้งสองรูปแบบนี้ได้รับการสนับสนุนอย่างกว้างขวางสำหรับการสร้าง การอ่าน และการถอดรหัสในสถานการณ์จริงที่ใช้กันทั่วไป[ 40 ]ขึ้นอยู่กับกรณีการใช้งานเฉพาะ ทางเลือกอื่นของ JSON ได้แก่:

  • สำหรับรูปแบบข้อความCSVและส่วนขยายของ JSON (ดูด้านล่าง) Ion ยังมีรูปแบบข้อความที่เป็นส่วนขยายของ JSON (ประเภทหลัก คำอธิบายประกอบ ความคิดเห็น และอนุญาตให้มีเครื่องหมายจุลภาคปิดท้ายได้หลากหลายกว่า) [ 41 ]
  • เพื่อการประมวลผลที่รวดเร็วขึ้นโดยแลกกับความสามารถในการอ่านของมนุษย์ รูปแบบการแลกเปลี่ยนข้อมูลที่สามารถแสดงวัตถุ JSON ทั้งหมดได้ ได้แก่CBOR (มาตรฐาน IETF RFC) และไบนารีIon [ 41 ] Google Protocol Buffersก็สามารถเติมเต็มช่องว่างนี้ได้เช่นกัน เนื่องจากความสามารถในการแยกวิเคราะห์โดยไม่ต้องใช้สคีมา แต่ไม่ได้มีวัตถุประสงค์เพื่อใช้เป็นภาษาแลกเปลี่ยน นอกจากนี้ ฐานข้อมูลเช่น SQLite และ PostgreSQL ยังมีการแสดงไบนารีภายในของตนเองที่เรียกว่า "JSONB" ซึ่งไม่ได้มีไว้สำหรับการใช้งานภายนอก[ 42 ]

อีเอ็มแอลอี

XMLถูกใช้เพื่ออธิบายข้อมูลที่มีโครงสร้างและเพื่อแปลงวัตถุเป็นอนุกรม มีโปรโตคอลที่ใช้ XML หลายประเภทเพื่อแสดงโครงสร้างข้อมูลแบบเดียวกับ JSON สำหรับวัตถุประสงค์การแลกเปลี่ยนข้อมูลแบบเดียวกัน ข้อมูลสามารถเข้ารหัสใน XML ได้หลายวิธี รูปแบบที่ครอบคลุมที่สุดโดยใช้คู่แท็กส่งผลให้การแสดงผลมีขนาดใหญ่กว่า (ในแง่ของจำนวนอักขระ) กว่า JSON มาก แต่ถ้าข้อมูลถูกจัดเก็บในแอตทริบิวต์และ รูปแบบ แท็กสั้นโดยที่แท็กปิดถูกแทนที่ด้วย/><br> การแสดงผลมักจะมีขนาดใกล้เคียงกับ JSON หรือใหญ่กว่าเล็กน้อย[ 43 ]อย่างไรก็ตาม แอตทริบิวต์ XML สามารถมีได้เพียงค่าเดียว และแต่ละแอตทริบิวต์สามารถปรากฏได้มากที่สุดหนึ่งครั้งในแต่ละองค์ประกอบ

XML แยกข้อมูลออกจากเมตาเดตา (โดยใช้ส่วนประกอบและแอตทริบิวต์) ในขณะที่ JSON ไม่มีแนวคิดดังกล่าว

ความแตกต่างที่สำคัญอีกประการหนึ่งคือการกำหนดที่อยู่ของค่าต่างๆ JSON มีอ็อบเจ็กต์ที่มีการแมปคีย์กับค่าอย่างง่าย ในขณะที่ XML การกำหนดที่อยู่เกิดขึ้นบนโหนดซึ่งแต่ละโหนดจะได้รับ ID ที่ไม่ซ้ำกันผ่านทางตัวประมวลผล XML นอกจากนี้ มาตรฐาน XML ยังกำหนดแอตทริบิวต์ทั่วไปxml:idที่ผู้ใช้สามารถใช้เพื่อกำหนด ID ได้อย่างชัดเจน

ชื่อแท็ก XML ไม่สามารถมีอักขระใดๆ!"#$%&'()*+,/;<=>?@[\]^`{|}~, หรืออักขระเว้นวรรค และไม่สามารถขึ้นต้นด้วย-, ., หรือตัวเลขได้ ในขณะที่คีย์ JSON สามารถทำได้ (แม้ว่าจะต้องหลีกเลี่ยงเครื่องหมายอัญประกาศและเครื่องหมายแบ็กสแลชก็ตาม) [ 44 ]

ค่าใน XML เป็นสตริงของอักขระโดยไม่มี การตรวจสอบ ความปลอดภัยของประเภทข้อมูลในตัว XML มีแนวคิดเรื่องสคีมา (schema ) ซึ่งช่วยให้สามารถกำหนดประเภทข้อมูลได้อย่างชัดเจน กำหนดประเภทข้อมูลโดยผู้ใช้ กำหนดแท็กไว้ล่วงหน้า และมีโครงสร้างที่เป็นทางการ ทำให้สามารถตรวจสอบความถูกต้องของสตรีม XML ได้อย่างเป็นทางการ JSON มีประเภทข้อมูลในตัวหลายประเภท และมีแนวคิดสคีมาที่คล้ายกันในJSON Schema

XML รองรับความคิดเห็น ในขณะที่ JSON ไม่รองรับ[ 45 ] [ 20 ]

ซูเปอร์เซ็ต

การสนับสนุนความคิดเห็นและคุณสมบัติอื่นๆ ถือว่ามีประโยชน์ ซึ่งนำไปสู่การสร้างชุดข้อมูล JSON ที่ไม่เป็นไปตามมาตรฐานหลายชุด ในจำนวนนี้ได้แก่ HJSON [ 46 ] HOCON และ JSON5 (ซึ่งแม้จะมีชื่อเช่นนั้น แต่ก็ไม่ใช่เวอร์ชันที่ห้าของ JSON) [ 47 ] [ 48 ]

ยาเอ็มแอล

YAMLเวอร์ชัน 1.2 เป็นซูเปอร์เซ็ตของ JSON เวอร์ชันก่อนหน้าไม่เข้ากันอย่างเคร่งครัด ตัวอย่างเช่น การหลีกเลี่ยงเครื่องหมายทับ/ด้วยเครื่องหมายแบ็กสแลช\นั้นถูกต้องใน JSON แต่ไม่ถูกต้องใน YAML [ 49 ] YAML รองรับความคิดเห็น ในขณะที่ JSON ไม่รองรับ[ 49 ] [ 47 ] [ 20 ]

ซีเอสโอเอ็น

CSON (" CoffeeScript Object Notation") ใช้การเยื้องที่สำคัญและคีย์ที่ไม่ต้องใส่เครื่องหมายคำพูด และถือว่ามีการประกาศออบเจ็กต์ภายนอก มันถูกใช้เพื่อกำหนดค่า ตัว แก้ไขข้อความ AtomของGitHub [ 50 ] [ 51 ] [ 52 ]

นอกจากนี้ยังมีโปรเจกต์ที่ไม่เกี่ยวข้องอีกโปรเจกต์หนึ่งชื่อCSON ("Cursive Script Object Notation") ซึ่งมีไวยากรณ์คล้ายกับ JSON มากกว่า[ 53 ]

โฮคอน

HOCON ("Human-Optimized Config Object Notation") เป็นรูปแบบ ข้อมูล ที่มนุษย์อ่านได้และเป็นส่วนขยายของ JSON [ 54 ] การใช้งานของ HOCON ได้แก่:

  • โดยส่วนใหญ่จะใช้ร่วมกับPlay Framework [ 55 ] และได้ รับการพัฒนาโดยLightbend
  • นอกจากนี้ยังรองรับรูปแบบการกำหนดค่าสำหรับโปร เจกต์ .NETผ่าน Akka.NET [ 56 ] [ 57 ]และPuppet [ 58 ]
  • TIBCO Streaming: [ 59 ] HOCON เป็นรูปแบบไฟล์การกำหนดค่าหลักสำหรับผลิตภัณฑ์ตระกูล TIBCO Streaming [ 60 ] (StreamBase, LiveView และ Artifact Management Server) ตั้งแต่ TIBCO Streaming Release 10 เป็นต้นไป[ 61 ]
  • นอกจากนี้ยังเป็นรูปแบบไฟล์การกำหนดค่าหลักสำหรับระบบย่อยหลายระบบของ Exabeam Advanced Analytics อีกด้วย[ 62 ]
  • Jitsiใช้เป็นระบบการกำหนดค่า "ใหม่" และ ไฟล์ .propertiesเป็นระบบสำรอง[ 63 ] [ 64 ]

เจซอน5

JSON5 ("JSON5 Data Interchange Format") เป็นส่วนขยายของไวยากรณ์ JSON ซึ่งเช่นเดียวกับ JSON ก็เป็นไวยากรณ์ JavaScript ที่ถูกต้องเช่นกัน ข้อกำหนดนี้เริ่มต้นในปี 2012 และเสร็จสิ้นในปี 2018 ด้วยเวอร์ชัน 1.0.0 [ 65 ]ความแตกต่างหลักจากไวยากรณ์ JSON คือ:

  • เครื่องหมายจุลภาคปิดท้าย (ไม่จำเป็น)
  • คีย์วัตถุที่ไม่มีเครื่องหมายคำพูด
  • สตริงแบบเครื่องหมายอัญประกาศเดี่ยวและสตริงแบบหลายบรรทัด
  • รูปแบบตัวเลขเพิ่มเติม
  • ความคิดเห็น

ไวยากรณ์ JSON5 ได้รับการสนับสนุนในซอฟต์แวร์บางตัวในฐานะส่วนขยาย ของไวยากรณ์ JSON เช่นในSQLite [ 66 ]

เจซอนซี

JSONC (JSON ที่มีความคิดเห็น) เป็นส่วนย่อยของ JSON5 ที่ใช้ในVisual Studio Code ของ Microsoft : [ 67 ] [ 68 ]

  • รองรับความคิดเห็นแบบบรรทัดเดียว ( //) และความคิดเห็นแบบบล็อก ( /* */) [ 69 ]
  • ยอมรับเครื่องหมายจุลภาคปิดท้าย แต่ไม่แนะนำให้ใช้ และโปรแกรมแก้ไขข้อความจะแสดงคำเตือน

อนุพันธ์

รูปแบบการจัดเรียงข้อมูลหลายรูปแบบถูกสร้างขึ้นโดยอิงจากหรือดัดแปลงมาจากข้อกำหนด JSON ตัวอย่างเช่น

  • GeoJSONรูปแบบที่ออกแบบมาเพื่อแสดงคุณลักษณะทางภูมิศาสตร์แบบง่าย[ 70 ] [ 71 ]
  • Jsonnetเป็น ภาษาเฉพาะโดเมน แบบอิงต้นแบบที่สร้างไฟล์ JSON เอกสาร JSON ทั้งหมดเป็นโปรแกรม Jsonnet ที่ถูกต้องซึ่งจะถูกสร้างขึ้นโดยไม่เปลี่ยนแปลงเมื่อรัน Jsonnet ขยาย JSON โดยรองรับตัวแปร การนำเข้า ลูป ความคิดเห็น ฯลฯ[ 81 ] [ 82 ] Jsonnet ใช้เป็นภาษาการกำหนดค่าสำหรับวิศวกรรมโครงสร้างพื้นฐานคลาวด์[ 83 ]

ดูเพิ่มเติม

หมายเหตุ

  1. ^ Crockford ใช้คำสรรพนามใหม่pe/per [ 2 ] บทความนี้ใช้ they/themเพื่อความเรียบง่ายและเข้าใจง่าย
  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=JSON&oldid=1358135103 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ เจซอน

JSON ( JavaScript Object Notation , ออกเสียงว่า / ˈdʒeɪsən / หรือ / ˈdʒeɪˌsɒn / ) เป็น รูป แบบ ไฟล์ มาตรฐานแบบเปิด และ รูป แบบ การ แลกเปลี่ยนข้อมูล ที่ใช้ ข้อความ ที่มนุษย์อ่านได้...

การตั้งชื่อและการออกเสียง

มาตรฐานสากล ปี 2017 (ECMA-404 และ ISO/IEC 21778:2017) ระบุว่า "JSON" ออกเสียงว่า " / ˈ dʒ eɪ .

มาตรฐาน

หลังจากที่ RFC 4627 ได้ถูกเผยแพร่เป็นข้อกำหนด "เชิงข้อมูล" ตั้งแต่ปี 2006 JSON ได้รับการกำหนดมาตรฐานครั้งแรกในปี 2013 ในชื่อ ECMA -404 [ 5 ] RFC 8259 ซึ่งเผยแพร่ในปี 2017 เป็นเวอร์ชันปัจจุบันของ มาตรฐานอินเทอร์เน็ต STD 90 และยังคงสอดคล้องกับ ECMA-404 [ 7 ]...

ประวัติศาสตร์

JSON เกิดขึ้นจากความต้องการโปรโตคอลการสื่อสารแบบเรียลไทม์ระหว่างเซิร์ฟเวอร์กับเบราว์เซอร์โดยไม่ต้องใช้ปลั๊กอินเบราว์เซอร์ เช่น Flash หรือ Java applets ซึ่งเป็นวิธีการหลักที่ใช้ในช่วงต้นทศวรรษ 2000 [ 9 ]