รูปแบบ 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 เหมาะสมที่สุด
แสดงความคิดเห็น