ปัญหาที่แก้ไขโดย JSON
สมมติว่าคุณต้องการแลกเปลี่ยนวัตถุ JavaScript ปกติระหว่างคอมพิวเตอร์สองเครื่องและคุณตั้งกฎสองข้อ:
- ข้อมูลที่ส่งจะต้องเป็นสตริงปกติ
- คุณลักษณะเท่านั้นที่สามารถแลกเปลี่ยนวิธีการจะไม่ถูกส่ง
ตอนนี้คุณสร้างวัตถุสองชิ้นบนโฮสต์แรก:
var obj1 = { one: 1,"two":2,"three":3 }; // your example
var obj2 = { one: obj1.one, two: 2, three: obj1.one + obj1.two };
คุณจะแปลงวัตถุเหล่านั้นเป็นสายอักขระเพื่อส่งไปยังโฮสต์ที่สองได้อย่างไร
- สำหรับออบเจกต์แรกคุณสามารถส่งสตริงนี้ที่ได้รับจากการกำหนดตัวอักษร
'{ one: 1,"two":2,"three":3 }'
แต่ที่จริงแล้วคุณไม่สามารถอ่านตัวอักษรในส่วนสคริปต์ของเอกสาร (อย่างน้อยก็ไม่ง่าย) ดังนั้นobj1
และobj2
จะต้องดำเนินการจริงด้วยวิธีเดียวกัน
- คุณจำเป็นต้องระบุคุณสมบัติทั้งหมดและค่าของพวกเขาและสร้างสตริงที่คล้ายกับวัตถุตัวอักษร
JSON ถูกสร้างขึ้นเพื่อเป็นทางออกสำหรับความต้องการที่เพิ่งกล่าวถึง: มันเป็นชุดของกฎเพื่อสร้างสตริงที่เทียบเท่ากับวัตถุโดยการแสดงรายการคุณลักษณะและค่าทั้งหมด (เมธอดจะถูกละเว้น)
JSON ทำให้การใช้คำพูดสองครั้งเป็นปกติสำหรับชื่อและค่าของแอตทริบิวต์
จำไว้ว่า JSON เป็นชุดของกฎเท่านั้น (มาตรฐาน)
มีการสร้างวัตถุ JSON จำนวนเท่าใด
เพียงหนึ่งมันถูกสร้างขึ้นโดยเครื่องยนต์ JS
เอ็นจิ้น JavaScript สมัยใหม่ที่พบในเบราว์เซอร์มีอ็อบเจกต์พื้นเมืองชื่อ JSON วัตถุ JSON นี้สามารถ:
ถอดรหัสสตริงที่สร้างโดยใช้มาตรฐาน JSON โดยใช้ JSON.parse (สตริง) ผลลัพธ์เป็นอ็อบเจ็กต์ JS ปกติที่มีแอ็ตทริบิวต์และค่าที่พบในสตริง JSON
เข้ารหัสแอตทริบิวต์ / ค่าของวัตถุ JS ปกติโดยใช้ JSON.stringify () ผลลัพธ์เป็นสตริงที่สอดคล้องกับชุดของกฎ JSON
วัตถุ JSON (เดียว) คล้ายกับตัวแปลงสัญญาณฟังก์ชั่นคือการเข้ารหัสและถอดรหัส
โปรดทราบว่า:
JSON.parse () ไม่ได้สร้างวัตถุ JSON มันสร้างวัตถุ JS ปกติไม่มีความแตกต่างระหว่างวัตถุที่สร้างขึ้นโดยใช้วัตถุตามตัวอักษรและวัตถุที่สร้างขึ้นโดย JSON.parse () จากสตริงที่สอดคล้องกับ JSON
มีวัตถุ JSON เดียวเท่านั้นซึ่งใช้สำหรับการแปลงทั้งหมด
กลับไปที่คำถาม :
Q1: อนุญาตให้ใช้เครื่องหมายอัญประกาศเดี่ยวสำหรับวัตถุตัวอักษร โปรดทราบว่าเครื่องหมายคำพูดจะใช้เป็นทางเลือกสำหรับชื่อแอตทริบิวต์และจำเป็นสำหรับค่าสตริง ตัวอักษรของวัตถุไม่ได้อยู่ในเครื่องหมายคำพูด
Q2: วัตถุที่สร้างจากตัวอักษรและการใช้ JSON.parse () เหมือนกันอย่างเคร่งครัด วัตถุทั้งสองนี้มีค่าเท่ากันหลังการสร้าง:
var obj1 = { one: 1, "two": 2, "three": 3 };
var obj2 = JSON.parse('{ "one": "1", "two": "2", "three": "3" }');
Q3: ในเบราว์เซอร์ที่ทันสมัยJSON.parse()
ใช้ในการสร้างวัตถุ JS จากสตริงที่สอดคล้องกับ JSON (jQuery ยังมีวิธีการเทียบเท่าที่สามารถใช้ได้กับเบราว์เซอร์ทั้งหมด)