รูปแบบ JSON
JSON เป็นรูปแบบการแลกเปลี่ยนข้อมูลแบบข้อความ ซึ่งหมายความว่าอ่านง่ายทั้งสำหรับบุคคลและโปรแกรม ชื่อของมันสอดคล้องกับตัวย่อภาษาอังกฤษของ สัญกรณ์วัตถุ JavaScript และได้มาตรฐานดังนี้ ECMA-404. แม้ว่ามันจะเป็นรูปแบบที่ใกล้เคียงกันมากก็ตาม JavaScriptเนื่องจากเป็นเรื่องง่ายมากที่จะประมวลผลในการเข้ารหัสข้อมูลอ็อบเจ็กต์หรือรับข้อมูล จึงยังใช้ในภาษาการเขียนโปรแกรมอื่นๆ อีกหลายภาษา (C, C + +, ชวา, หลาม...) เป็นอีกทางเลือกหนึ่ง เช่น ไปยัง XML ซึ่งมีวัตถุประสงค์คล้ายกัน แต่เนื่องจากมีข้อมูลเมตามากกว่า จึงต้องการข้อความมากกว่า ดังนั้นจึงใช้พื้นที่มากขึ้น ใช้แบนด์วิธมากขึ้นและต้องการทรัพยากรมากขึ้นในการเข้ารหัสและถอดรหัส ข้อมูลที่มีอยู่ JSON.
ข้อมูลของวัตถุที่เข้ารหัส JSON อยู่ภายในวงเล็บปีกกา คุณสมบัติต่างๆ ที่รวมอยู่ในคุณสมบัติจะถูกคั่นด้วยเครื่องหมายจุลภาค และชื่อคุณสมบัติอยู่ข้างหน้าค่า โดยคั่นด้วยเครื่องหมายทวิภาค
ชื่อคุณสมบัติจะต้องอยู่ในเครื่องหมายคำพูดโดยใช้เครื่องหมายคำพูดคู่ (แม้ว่า parsers บางตัวจะสนับสนุนเครื่องหมายคำพูดเดี่ยว) และแม้ว่าอักขระพิเศษบางตัวจะได้รับอนุญาตสำหรับชื่อ (เช่น เครื่องหมายเน้นเสียง) ก็ไม่แนะนำให้หลีกเลี่ยงเกณฑ์ของกลไกการวิเคราะห์บางตัว และ หลีกเลี่ยงข้อขัดแย้งเมื่อใช้คุณสมบัติโดยเฉพาะกับไวยากรณ์ dot (object.property)
1 2 3 4 5 6 7 8 | { “dispositivo”:“EA4-CD-145”, “tension”:12.1, “intensidad”:0.99, “temperatura”:19.25, “deteccion”:false, “tiempo_uso”:158.36 } |
ในตัวอย่างด้านบน คุณจะเห็นออบเจ็กต์ที่มีคุณสมบัติหกประการที่มีค่าแบบง่าย ตัวเลข บูลีน หรือข้อความ แต่ในรูปแบบ JSONคุณสมบัติยังสามารถได้รับเป็นค่าวัตถุ (รวมถึง "วัตถุพิเศษ" null) หรืออาร์เรย์นอกเหนือจากสตริงข้อความ (ข้อความในเครื่องหมายคำพูด) ตัวเลข (ในรูปแบบที่แตกต่างกัน) หรือค่าบูลีน (จริงหรือเท็จ ).
เช่นเดียวกับภาษา JavaScript (JSON เป็นเซตย่อยของ JavaScript) เพื่อแสดงเมทริกซ์ ค่าของเมทริกซ์จะอยู่ในวงเล็บเหลี่ยมและคั่นด้วยเครื่องหมายจุลภาค กรณีที่ง่ายที่สุดแสดงไว้ในตัวอย่างด้านล่าง เป็นอาร์เรย์หนึ่งมิติ ซึ่งเป็นเวกเตอร์ ที่ประกอบด้วยค่าตัวเลข
1 2 3 | { “temperatura”:[10.00,12.50,15.75,18.25,19.50,20.00,21.75,22.00,22.00,22.25] } |
En JavaScript ไม่จำเป็นที่องค์ประกอบทั้งหมดของอาร์เรย์จะต้องเป็นประเภทเดียวกัน ตัวอย่างเช่น สามารถผสมสตริงข้อความและค่าตัวเลขได้ เวกเตอร์ซึ่งเป็นอาร์เรย์หนึ่งมิติสามารถเป็นหนึ่งในองค์ประกอบของอาร์เรย์อื่นได้ ทำให้สามารถสร้างอาร์เรย์หลายมิติที่มีความยาวแปรผันได้ ตัวอย่างต่อไปนี้แสดงวัตถุที่มีคุณสมบัติสามประการ: อันแรกเป็นอาร์เรย์สองมิติที่มีความยาวคงที่ ความยาวตัวแปรที่สอง และอันที่สามสร้างขึ้นโดยอาร์เรย์ที่มีค่าประเภทต่างกัน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | { “coordenada”: [ [78.59,12.33], [85.23,8.01], [90.95,6.12], [92.50,3.86], [96.12,–1.55], [98.60,–3.14] ], “impacto”: [ [5,20,10,36,10,2], [33,41,43], [44,44,44,49,51,52,60,62,59], [12,11,15,16] ], “entrada”: [ “T26-A”, [63.15,57.37], 14420.122256, true ], } |
ตัวอย่างต่อไปนี้ใช้วัตถุอื่นเป็นค่าสำหรับคุณสมบัติของวัตถุหลัก ไม่มีการจำกัดระดับของการซ้อน ดังนั้น ในทางกลับกัน วัตถุที่เป็นค่าคุณสมบัติของพาเรนต์ก็สามารถมีวัตถุอื่นเป็นค่าทรัพย์สินของมันได้ และอื่นๆ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | { “pir”: { umbral:0.15, ultima:258982.67, deteccion:false }, “termometro”: { actual:19.25, minima:8.05, maxima,22.60 }, “vibracion”:false, “distancias”: [ 12.60, 9.10, 12.60, 8.90 ] } |
เช่นเดียวกับที่มันเกิดขึ้นด้วย JavaScriptรหัส Escape ใช้เพื่อรวมอักขระบางตัวภายในสตริงข้อความ วิธีทั่วไปที่สุดคือการใช้โค้ดยูนิโค้ดที่แสดงด้วยแถบ Escape ตัวอักษร u และเลขฐานสิบหกสี่หลักที่มีรูปแบบ "\u263A"
เพื่ออ้างถึง ☺ เช่น
อักขระมาตรฐานที่มีอยู่ในภาษาส่วนใหญ่ (คล้ายกับ C) มีดังต่อไปนี้
- เสื่อมถอยหลัง
\b
รหัส ASCII 8 (0x08) - Tabulator
\t
รหัส ASCII 9 (0x09) โดยปกติจะแสดงเป็น HT (ตัวตารางแนวนอน) - บรรทัดใหม่
\n
รหัส ASCII 10 (0x0A) โดยปกติจะแสดงเป็น LF (ตัวป้อนบรรทัด) - หน้าใหม่
\f
รหัส ASCII 12 (0x0C) โดยปกติจะแสดงเป็น FF (ฟีดแบบฟอร์ม) - กลับ
\r
รหัส ASCII 13 (0x0D) โดยปกติจะแสดงเป็น CR (การคืนแคร่) - อัญประกาศ
\"
รหัส ASCII 34 (0x22) - แถบแยก
\/
รหัส ASCII 57 (0x2F) - แบ็กสแลช
\\
รหัส ASCII 134 (0x5C) - รหัสยูนิโค้ด
\uXXXX
ที่ได้มาจาก C (และเกี่ยวข้องกับ ยูนิกซ์ และสิ่งที่คล้ายคลึงเช่น GNU / Linux) จุดสิ้นสุดของบรรทัดมักจะแสดงด้วย \n
และเป็นสิ่งที่ต้องเลือกเข้ามา JSON แต่เป็นที่น่าสนใจที่ต้องจำไว้ว่าระบบปฏิบัติการบางระบบต้องการทางเลือกอื่น Windows มักจะหมายถึงด้วย \r\n
การลงท้ายบรรทัดและ Mac OS (ก่อน OS \r
เกี่ยวกับรูปแบบตัวเลขก็มีการอ้างอิงเช่นกัน JavaScript. ตัวคั่นทศนิยมคือจุด ขีดกลาง (ASCII 45 0x2D) ใช้เป็นเครื่องหมายลบ และ สัญกรณ์ในรูปแบบเอ็กซ์โปเนนเชียล (สัญกรณ์วิทยาศาสตร์) ใช้ E
เป็นตัวบ่งชี้ (ซึ่งอาจเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กก็ได้)
1 2 3 4 5 6 | { “sondas”:[“ZA-01”,“ZB-01”,“ZB-02”,“ZB-03”], “maximos”:[5.612E+6,1.3774E+8,1.034E+9,2.992E+7], “minimos”:[1.25E–3,1.01E–3,1.2E–7,2.351E–3], “ayuda”:“Antes de colocar\nel sensor en el medio\nAsegúrese de verificar\nEl calibrado previo” } |
อย่างที่ผมบอกไปตอนต้นว่า ในการใช้ข้อมูลซึ่งจะได้รับเป็นข้อความ ภาษาโปรแกรมต่างๆ มีฟังก์ชันการวิเคราะห์และการมอบหมายงาน ตัวอย่างต่อไปนี้แสดงให้เห็นว่าจะนำไปใช้อย่างไร JavaScript. เพื่อให้สามารถใช้งานได้จากคอนโซล จึงรวมการกำหนดข้อมูลไว้ด้วย JSON เพื่อหลีกเลี่ยงข้อผิดพลาดที่อาจเกิดขึ้นได้ ขึ้นอยู่กับมาตรฐาน ECMA ที่ล่ามใช้ JavaScript มีการกำหนดวัตถุแล้ว JSON ในบรรทัดเดียว ฉบับที่ 6 ปี 2016 (ECMA-262) รองรับสตริงหลายบรรทัด รุ่นที่ 5 (จนถึงปี 2011) จำเป็นต้องเพิ่มโค้ด Escape \
และอันที่แล้วจะต้องแก้ด้วยมือหรือใช้เส้นเดียว
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | datos=‘{“fecha”:”20160315102513″,”sonda”:”el acceso principal”,”temperatura”:19.25,”ultravioleta”:2.8,”toldo”:false}’; estado=JSON.parse(datos); mensaje=“El “; mensaje+=estado.fecha.substring(6,8); mensaje+=” del “; mensaje+=estado.fecha.substring(4,6); mensaje+=” de “; mensaje+=estado.fecha.substring(0,4); mensaje+=” la temperatura era de “; mensaje+=estado.temperatura; mensaje+=” °C en “; mensaje+=estado.sonda; mensaje+=” con el toldo “; mensaje+=estado.toldo?“bajado”:“subido”; mensaje+=” y un índice UV de “; mensaje+=Math.round(estado.ultravioleta); console.log(mensaje); //El 15 del 03 de 2016 la temperatura era de 19.25 °C en el acceso principal con el toldo subido y un índice UV de 3 |
คำเตือนไม่ให้ผู้ใช้ใหม่สับสน JavaScript. ภายในโค้ด JavaScript ไม่จำเป็นต้องใช้สตริงข้อความเพื่อสร้างออบเจ็กต์ ในตัวอย่างก่อนหน้านี้ใช้เพื่อจำลองข้อมูลที่มาถึง เช่น จากเซิร์ฟเวอร์ หากต้องการกำหนดวัตถุให้กับตัวแปร ให้ทำดังนี้:
1 | var estado={temperatura:21.5, tension:231.25, cosumo:0.85, nombre:“pasillo”}; |
วัตถุนั้นสามารถแปลงเป็นข้อความได้ เช่น ด้วยฟังก์ชัน stringify
ดังต่อไปนี้:
1 | var texto=JSON.stringify(estado); |
รูปแบบ JSON มันค่อนข้างยืดหยุ่น แต่ส่วนใหญ่เป็นเพราะมันใช้ข้อความเพื่อให้มนุษย์อ่านได้ จึงมีข้อเสียอยู่บ้าง ประการแรกคือต้องใช้หน่วยความจำมากขึ้นและใช้แบนด์วิธมากกว่าที่จำเป็น ในตัวอย่างก่อนหน้านี้ มีการใช้รูปแบบที่มีจุดมุ่งหมายเพื่อให้อ่านได้ง่ายกว่าประหยัด ดังนั้นจึงไม่ใช่ตัวอย่างของการประหยัด แม้ว่าจะมีองค์ประกอบหลายอย่างของรูปแบบ (วงเล็บปีกกา วงเล็บเหลี่ยม เครื่องหมายคำพูด...) ที่จะ ใช้ทรัพยากรต่อไปเมื่อเทียบกับข้อมูลที่นำเสนอ ดิบ
ปัญหาที่สองเกิดขึ้นเมื่อต้องจัดการกับข้อมูลไบนารี่ล้วนๆ (เช่น รูปภาพ) เมื่อต้องจัดการกับส่วนเล็กๆ ก็สามารถแก้ไขได้ด้วยสิ่งที่อธิบายไว้เพื่อแก้ไขการจัดรูปแบบของอักขระพิเศษ แต่ถ้าเป็นเรื่องเกี่ยวกับการเข้ารหัสข้อมูลบางมิติ จำเป็นต้องฝังไว้ในรูปแบบ JSON โดยใช้รูปแบบข้อความอื่น การเข้ารหัสที่ใช้มากที่สุดในการแก้ไขปัญหานี้คือ Base64 เนื่องจากหลายภาษามีห้องสมุดเพื่อแปลงข้อมูลไปในทิศทางเดียวหรืออย่างอื่น หากข้อมูลที่ถูกจัดการส่วนใหญ่เป็นประเภทนี้ และ/หรือไม่จำเป็นสำหรับบุคคลที่จะตีความข้อมูลโดยไม่มีโปรแกรม ก็ควรพิจารณาว่ารูปแบบนั้นหรือไม่ JSON เหมาะสมที่สุด
แสดงความคิดเห็น