วิธีแยก JSON ใน C ++

How Parse Json C

จุดประสงค์ของบทช่วยสอนนี้คือเพื่อทำความเข้าใจข้อมูล JSON และวิธีแยกวิเคราะห์ข้อมูล JSON ใน C++ เราจะหารือเกี่ยวกับข้อมูล JSON, Object, Array, JSON syntax และจากนั้นศึกษาตัวอย่างการทำงานต่างๆ เพื่อทำความเข้าใจกลไกการแยกวิเคราะห์ของข้อมูล JSON ใน C++

JSON คืออะไร?

JSON เป็นการนำเสนอแบบข้อความที่มีน้ำหนักเบาสำหรับการจัดเก็บและถ่ายโอนข้อมูลที่มีโครงสร้างอย่างเป็นระเบียบ ข้อมูล JSON จะแสดงในรูปแบบของรายการที่เรียงลำดับและคู่คีย์-ค่า JSON ย่อมาจาก NS ava NS สคริปต์ หรือ bject NS โสต ตามที่ระบุชื่อเต็ม มันมาจาก JavaScript อย่างไรก็ตาม ข้อมูล JSON ได้รับการสนับสนุนในภาษาโปรแกรมยอดนิยมส่วนใหญ่



มักใช้ในการถ่ายโอนข้อมูลจากเซิร์ฟเวอร์ไปยังหน้าเว็บ มันง่ายกว่าและสะอาดกว่ามากในการแสดงข้อมูลที่มีโครงสร้างใน JSON มากกว่า XML



กฎไวยากรณ์ JSON

นี่คือกฎไวยากรณ์ JSON:



  1. ข้อมูล JSON ควรอยู่ในรูปของคู่คีย์-ค่าเสมอ
  2. ข้อมูล JSON คั่นด้วยเครื่องหมายจุลภาค
  3. วงเล็บปีกกาใช้เพื่อแสดงออบเจ็กต์ JSON
  4. วงเล็บเหลี่ยมใช้เพื่อแทนอาร์เรย์ JSON

ข้อมูล JSON คืออะไร

ข้อมูล JSON จะแสดงในรูปแบบของคู่คีย์-ค่า ซึ่งคล้ายกับพจนานุกรมหรือแฮชในภาษาโปรแกรมอื่นๆ

ชื่อ : Drake

นี่คือตัวอย่างข้อมูล JSON อย่างง่าย กุญแจสำคัญคือชื่อและ Drake เป็นค่าที่สอดคล้องกัน คีย์ เช่น ชื่อ และค่า เช่น Drake คั่นด้วยเครื่องหมายทวิภาค



JSON นามสกุลไฟล์

โดยปกติ ข้อมูล JSON จะถูกเก็บไว้ในไฟล์ที่มีนามสกุล .json ตัวอย่างเช่น ในการจัดเก็บข้อมูลของพนักงาน คุณสามารถตั้งชื่อไฟล์ว่า 'employee.json' นี่จะเป็นไฟล์ข้อความธรรมดา จากนั้นคุณสามารถเปิดไฟล์ JSON นี้ในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ

วัตถุ JSON

ออบเจ็กต์ JSON เป็นเพียงข้อมูล JSON ที่อยู่ภายในวงเล็บปีกกา นี่คือตัวอย่างวัตถุ JSON:

{
ชื่อ:Drake,
รหัสพนักงาน:23547,
โทรศัพท์: 23547,
สาขา:การเงิน
}

ออบเจ็กต์ JSON สามารถมีข้อมูล JSON ได้หลายรายการ ข้อมูล JSON แต่ละรายการคั่นด้วยเครื่องหมายจุลภาค ข้อมูล JSON จะแสดงเป็นคู่คีย์-ค่า คีย์ เช่น ชื่อ และค่า เช่น Drake คั่นด้วยเครื่องหมายทวิภาค ในตัวอย่างข้างต้น มีคู่คีย์-ค่าสี่คู่ คีย์แรกคือชื่อ; Drake เป็นค่าที่สอดคล้องกันสำหรับมัน ในทำนองเดียวกัน EmployeeID, Phone และ Department เป็นอีกสามคีย์

อาร์เรย์ JSON

อาร์เรย์ JSON สามารถมีวัตถุ JSON ที่คั่นด้วยเครื่องหมายจุลภาคได้หลายรายการ อาร์เรย์ JSON อยู่ภายในวงเล็บเหลี่ยม มาดูตัวอย่างอาร์เรย์ JSON:

'นักเรียน':[
{'ชื่อจริง':'ฌอน', 'นามสกุล':'สีน้ำตาล'},
{'ชื่อจริง':'เดรก', 'นามสกุล':'วิลเลียมส์'},
{'ชื่อจริง':'NS', 'นามสกุล':'มิลเลอร์'},
{ชื่อจริง:ปีเตอร์,นามสกุล:จอห์นสัน}
]

นี่คือตัวอย่างของอาร์เรย์ JSON ในที่นี้ นักเรียนจะอยู่ในวงเล็บเหลี่ยม เช่น อาร์เรย์ และมีออบเจ็กต์ JSON สี่รายการ แต่ละอ็อบเจ็กต์เหล่านี้จะแสดงในรูปแบบของคู่คีย์-ค่า และคั่นด้วยเครื่องหมายจุลภาค

ไฟล์ JSON ตัวอย่าง

ตอนนี้ เนื่องจากเราเข้าใจข้อมูล JSON, ออบเจ็กต์ JSON, อาร์เรย์ JSON มาดูตัวอย่างไฟล์ JSON กัน:

{
ชื่อจริง:ฌอน,
นามสกุล:สีน้ำตาล,
รหัสนักศึกษา: 21453,
สาขา:คอมพิวเตอร์ วท.,
วิชา:[คณิตศาสตร์,Phy,เคมี]
}

การแยกวิเคราะห์ไลบรารีใน C ++:

ไม่มีโซลูชันดั้งเดิมสำหรับการแยกวิเคราะห์ข้อมูล JSON ใน C ++ อย่างไรก็ตาม มีหลายไลบรารีที่จะแยกวิเคราะห์ข้อมูล JSON ใน C++ ในบทความนี้ เราจะพิจารณาสองไลบรารียอดนิยมที่สุดเพื่อแยกวิเคราะห์ข้อมูล JSON ใน C++ นี่คือลิงก์ GitHub สำหรับการแยกวิเคราะห์ข้อมูล JSON:

  1. https://github.com/nlohmann/json
  2. https://github.com/Tencent/rapidjson/

คุณอาจต้องการดาวน์โหลดไลบรารีเหล่านี้เพื่อให้สามารถดำเนินการตัวอย่างที่แสดงด้านล่าง

ตัวอย่าง

ตอนนี้ เรามีความเข้าใจพื้นฐานเกี่ยวกับข้อมูล JSON ออบเจ็กต์ อาร์เรย์ และไลบรารีการแยกวิเคราะห์ที่พร้อมใช้งาน ตอนนี้มาดูตัวอย่างสองสามตัวอย่างเพื่อแยกวิเคราะห์ข้อมูล JSON ใน C ++:

  • ตัวอย่างที่ 1: แยก JSON ใน C++
  • ตัวอย่างที่ 2: แยกวิเคราะห์และทำให้เป็นอนุกรม JSON ใน C++
  • ตัวอย่างที่ 3: แยกวิเคราะห์ JSON ใน C++

สำหรับ Example-1 และ Example-2 เราจะใช้ไลบรารี nlohmann ในกรณีของ Example-3 เราจะใช้ไลบรารี RapidJSON

ตัวอย่างที่ 1: แยก JSON ใน C++

ในโปรแกรมตัวอย่างนี้ เราจะสาธิตวิธีการเข้าถึงค่าของข้อมูล JSON ใน C++

#รวม
#include 'json.hpp'

ใช้ json=นโลมานน์::json;

intหลัก()
{

// jdEmployees
json jdEmployees=
{
{'ชื่อจริง','ฌอน'},
{'นามสกุล','สีน้ำตาล'},
{'รหัสนักศึกษา',21453},
{'สาขา','คอมพิวเตอร์ Sc.'}
};

// เข้าถึงค่า
ชั่วโมง::สตริงfName=jdพนักงานค่า('ชื่อจริง', 'อ๊ะ');
ชั่วโมง::สตริงlชื่อ=jdพนักงานค่า('นามสกุล', 'อ๊ะ');
intsID=jdพนักงานค่า('รหัสนักศึกษา', 0);
ชั่วโมง::สตริงแผนก=jdพนักงานค่า('สาขา', 'อ๊ะ');

// พิมพ์ค่า
ชั่วโมง::ค่าใช้จ่าย << 'ชื่อจริง: ' <<fName<<ชั่วโมง::endl;
ชั่วโมง::ค่าใช้จ่าย << 'นามสกุล: ' <<lชื่อ<<ชั่วโมง::endl;
ชั่วโมง::ค่าใช้จ่าย << 'รหัสนักศึกษา: ' <<sID<<ชั่วโมง::endl;
ชั่วโมง::ค่าใช้จ่าย << 'สาขา: ' <<แผนก<<ชั่วโมง::endl;

กลับ 0;
}

ตัวอย่างที่ 2: แยกวิเคราะห์และทำให้เป็นอนุกรม JSON ใน C++

ในโปรแกรมตัวอย่างนี้ เราจะมาดูวิธีแยกวิเคราะห์และทำให้เป็นอนุกรม JSON ใน C++ เรากำลังใช้ json::parse() เพื่อแยกวิเคราะห์ข้อมูล JSON

#รวม
#include 'json.hpp'
#รวม

ใช้ json=นโลมานน์::json;

intหลัก()
{
// นี่คือข้อความ JSON
charข้อความ[] =NS'(
{
'
หนังสือ': {
'
ความกว้าง': 450,
'
ส่วนสูง': 30,
'
ชื่อ':'สวัสดีชาวโลก'
'
เป็นชีวประวัติ': เท็จ,
'
จำนวนสำเนา': 4,
'
รหัสห้องสมุด': [2319, 1406, 3854, 987]
}
}
) '
;

// มาแยกวิเคราะห์และทำให้เป็นอนุกรม JSON
json j_complete=json::แยกวิเคราะห์(ข้อความ);
ชั่วโมง::ค่าใช้จ่าย <<ชั่วโมง::setw(4) <<j_complete<<ชั่วโมง::endl;
}

ตัวอย่างที่ 3: แยกวิเคราะห์ JSON ใน C++

ตอนนี้ เราจะสาธิตวิธีแยกวิเคราะห์สตริง JSON โดยใช้ไลบรารี RapidJSON RapidJSON ได้รับแรงบันดาลใจจาก RapidXML ในโปรแกรมตัวอย่างนี้ เรากำลังแยกวิเคราะห์สตริง JSON เป็น DOM เราได้ประกาศ mydoc ของประเภท Document แล้วใช้วิธี mydoc.parse() เพื่อแยกวิเคราะห์สตริง JSON

#รวม
#include 'rapidjson/writer.h'
#include 'rapidjson/document.h'
#include 'rapidjson/stringbuffer.h'

ใช้เนมสเปซ Rapidjson;

intหลัก()
{

const char*json= '{'ชื่อจริง':'ฌอน','นามสกุล':'สีน้ำตาล','empId': 21453,
'
สาขา':'คอมพิวเตอร์ วท.'}';

// แยกสตริง JSON เป็น DOM
เอกสาร mydoc;
มายดอคพาร์เซ(json);

// DOM เป็นสตริง
บัฟเฟอร์สตริงบัฟเฟอร์;
นักเขียน<StringBuffer>นักเขียน(กันชน);

มายดอคยอมรับ(นักเขียน);

// พิมพ์ผลลัพธ์
ชั่วโมง::ค่าใช้จ่าย <<กันชน.GetString() <<ชั่วโมง::endl;

กลับ 0;
}

บทสรุป

ในบทความนี้เราได้พูดคุยกันสั้น ๆ JSON ข้อมูล วัตถุ อาร์เรย์ และไวยากรณ์ ดังที่เราทราบ ไม่มีโซลูชันดั้งเดิมสำหรับการแยกวิเคราะห์ข้อมูล JSON ใน C++ เราใช้สองไลบรารีที่แตกต่างกันเพื่อแยกวิเคราะห์ข้อมูล JSON ใน C ++ เราดูตัวอย่างที่แตกต่างกันสามตัวอย่างเพื่อแสดงกลไกการแยกวิเคราะห์ข้อมูล JSON ใน C++ เมื่อเปรียบเทียบกับไลบรารี nlohmann แล้ว RapidJSON มีขนาดเล็ก รวดเร็ว และเป็นมิตรกับหน่วยความจำ