Cách phân tích cú pháp JSON trong C ++

How Parse Json C



Mục đích của hướng dẫn này là hiểu dữ liệu JSON và cách phân tích dữ liệu JSON trong C ++. Chúng ta sẽ thảo luận về dữ liệu JSON, Đối tượng, Mảng, cú pháp JSON và sau đó đi qua một số ví dụ làm việc để hiểu cơ chế phân tích cú pháp của dữ liệu JSON trong C ++.

JSON là gì?

JSON là một biểu diễn dựa trên văn bản có trọng lượng nhẹ để lưu trữ và truyền dữ liệu có cấu trúc một cách có tổ chức. Dữ liệu JSON được biểu diễn dưới dạng danh sách có thứ tự và các cặp khóa-giá trị. JSON là viết tắt của NS ava NS làm tê liệt HOẶC bject n rái cá. Như tên đầy đủ đã chỉ ra, nó có nguồn gốc từ JavaScript. Tuy nhiên, dữ liệu JSON được hỗ trợ trong hầu hết các ngôn ngữ lập trình phổ biến.







Nó thường được sử dụng để chuyển dữ liệu từ máy chủ đến một trang web. Việc biểu diễn dữ liệu có cấu trúc trong JSON dễ dàng và rõ ràng hơn nhiều so với XML.



Quy tắc cú pháp JSON

Dưới đây là các quy tắc cú pháp JSON:



  1. Dữ liệu JSON phải luôn ở dạng các cặp khóa-giá trị.
  2. Dữ liệu JSON được phân tách bằng dấu phẩy.
  3. Một dấu ngoặc nhọn được sử dụng để đại diện cho Đối tượng JSON.
  4. Dấu ngoặc vuông được sử dụng để đại diện cho Mảng JSON.

Dữ liệu JSON là gì?

Dữ liệu JSON được biểu diễn dưới dạng các cặp khóa-giá trị. Điều này tương tự với từ điển hoặc băm trong các ngôn ngữ lập trình khác.





Tên: Drake

Đây là một ví dụ về dữ liệu JSON đơn giản. Chìa khóa ở đây là Tên và Drake là giá trị tương ứng. Khóa, tức là Tên và giá trị, tức là, Drake được phân tách bằng dấu hai chấm.



Phần mở rộng tệp JSON

Dữ liệu JSON thường được lưu trữ trong tệp có phần mở rộng là .json. Ví dụ: để lưu trữ dữ liệu của nhân viên, bạn có thể chỉ cần đặt tên tệp là 'worker.json'. Đây sẽ là một tệp văn bản đơn giản. Sau đó, bạn có thể mở tệp JSON này trong bất kỳ trình soạn thảo văn bản yêu thích nào của bạn.

Đối tượng JSON

Đối tượng JSON không là gì ngoài dữ liệu JSON nằm trong dấu ngoặc nhọn. Đây là một đối tượng JSON mẫu:

{
Tên:vịt đực,
Mã hiệu công nhân:23547a,
Điện thoại: 23547,
phòng:Tài chánh
}

Một đối tượng JSON có thể chứa nhiều dữ liệu JSON. Mỗi dữ liệu JSON được phân tách bằng dấu phẩy. Dữ liệu JSON được biểu diễn dưới dạng các cặp khóa-giá trị. Khóa, tức là Tên và giá trị, tức là, Drake được phân tách bằng dấu hai chấm. Trong ví dụ trên, có bốn cặp khóa-giá trị. Chìa khóa đầu tiên là Tên; Drake là giá trị tương ứng cho nó. Tương tự như vậy, EmployeeID, Phone và Department là ba khóa còn lại.

Mảng JSON

Mảng JSON có thể chứa một số đối tượng JSON được phân tách bằng dấu phẩy. Mảng JSON được bao trong một dấu ngoặc vuông. Hãy xem ví dụ về mảng JSON:

'Sinh viên':[
{'tên đầu tiên':'Sean', 'họ':'Màu nâu'},
{'tên đầu tiên':'Vịt đực', 'họ':'Williams'},
{'tên đầu tiên':'Tom', 'họ':'Miller'},
{tên đầu tiên:Peter,họ:Johnson}
]

Đây là một ví dụ về mảng JSON. Ở đây, Sinh viên được bao bằng một dấu ngoặc vuông, tức là mảng và nó chứa bốn đối tượng JSON. Mỗi đối tượng này được biểu diễn dưới dạng các cặp khóa-giá trị và được phân tách bằng dấu phẩy.

Tệp JSON mẫu

Bây giờ, vì chúng ta đã hiểu dữ liệu JSON, đối tượng JSON, mảng JSON, hãy xem ví dụ về tệp JSON:

{
tên đầu tiên:Sean,
họ:màu nâu,
thẻ học sinh: 21453,
phòng:Máy tính Sc.,
Đối tượng:[Toán học,Phy,Chem]
}

Thư viện phân tích cú pháp trong C ++:

Không có giải pháp gốc nào để phân tích dữ liệu JSON trong C ++. Tuy nhiên, có một số thư viện để phân tích dữ liệu JSON trong C ++. Trong bài viết này, chúng ta sẽ xem xét hai thư viện phổ biến nhất để phân tích dữ liệu JSON trong C ++. Dưới đây là các liên kết GitHub để phân tích dữ liệu JSON:

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

Bạn có thể muốn tải xuống các thư viện này để có thể thực hiện các ví dụ được hiển thị bên dưới.

Các ví dụ

Bây giờ, chúng ta đã hiểu cơ bản về dữ liệu JSON, các đối tượng, mảng và các thư viện phân tích cú pháp có sẵn. Bây giờ chúng ta hãy xem xét một vài ví dụ để phân tích cú pháp dữ liệu JSON trong C ++:

  • Ví dụ-1: Phân tích cú pháp JSON trong C ++
  • Ví dụ-2: Phân tích cú pháp và tuần tự hóa JSON trong C ++
  • Ví dụ-3: Phân tích cú pháp JSON trong C ++

Đối với Ví dụ-1 và Ví dụ-2, chúng ta sẽ sử dụng thư viện nlohmann. Trong trường hợp của Ví dụ-3, chúng tôi sẽ sử dụng thư viện RapidJSON.

Ví dụ-1: Phân tích cú pháp JSON trong C ++

Trong chương trình ví dụ này, chúng tôi sẽ trình bày cách truy cập các giá trị của dữ liệu JSON trong C ++.

#bao gồm
#include 'json.hpp'

sử dụng json=nlohmann::json;

NSchủ chốt()
{

// jdEprisees
json jd=
{
{'tên đầu tiên','Sean'},
{'họ','Màu nâu'},
{'Thẻ học sinh',21453},
{'Phòng','Máy tính Sc.'}
};

// Truy cập các giá trị
giờ::dâyfName=jd Người lao động.giá trị('tên đầu tiên', 'Giáo sư');
giờ::dâylName=jd Người lao động.giá trị('họ', 'Giáo sư');
NSsID=jd Người lao động.giá trị('Thẻ học sinh', 0);
giờ::dâynợ=jd Người lao động.giá trị('Phòng', 'Giáo sư');

// In các giá trị
giờ::Giá cả << 'Tên đầu tiên: ' <<fName<<giờ::endl;
giờ::Giá cả << 'Họ: ' <<lName<<giờ::endl;
giờ::Giá cả << 'Thẻ học sinh: ' <<sID<<giờ::endl;
giờ::Giá cả << 'Phòng: ' <<nợ<<giờ::endl;

trở lại 0;
}

Ví dụ-2: Phân tích cú pháp và tuần tự hóa JSON trong C ++

Trong chương trình ví dụ này, chúng ta sẽ xem cách phân tích cú pháp và tuần tự hóa JSON trong C ++. Chúng tôi đang sử dụng json :: parse () để phân tích cú pháp dữ liệu JSON.

#bao gồm
#include 'json.hpp'
#bao gồm

sử dụng json=nlohmann::json;

NSchủ chốt()
{
// Đây là văn bản JSON
charchữ[] =NS'(
{
'
Sách': {
'
Chiều rộng': 450,
'
Chiều cao': 30,
'
Tiêu đề':'Chào thế giới',
'
isBiography': sai,
'
NumOfCopies': 4,
'
ID thư viện': [2319, 1406, 3854, 987]
}
}
) '
;

// Hãy phân tích cú pháp và tuần tự hóa JSON
json j_complete=json::phân tích cú pháp(chữ);
giờ::Giá cả <<giờ::setw(4) <<j_complete<<giờ::endl;
}

Ví dụ-3: Phân tích cú pháp JSON trong C ++

Bây giờ, chúng tôi sẽ trình bày cách phân tích cú pháp chuỗi JSON bằng thư viện RapidJSON. RapidJSON ban đầu được lấy cảm hứng từ RapidXML. Trong chương trình ví dụ này, chúng tôi đang phân tích một chuỗi JSON thành DOM. Chúng tôi đã khai báo mydoc của loại Tài liệu và sau đó sử dụng phương thức mydoc.parse () để phân tích cú pháp chuỗi JSON.

#bao gồm
#include 'quickjson / writer.h'
#include 'quickjson / document.h'
#include 'quickjson / stringbuffer.h'

sử dụng không gian tên quickjson;

NSchủ chốt()
{

hăng sô char*json= '{'tên đầu tiên':'Sean','họ':'màu nâu','empId': 21453,
'
phòng':'Máy tính Sc.'}';

// Phân tích cú pháp chuỗi JSON thành DOM
Tài liệu mydoc;
mydoc.Phân tích cú pháp(json);

// DOM thành chuỗi
Bộ đệm StringBuffer;
nhà văn<StringBuffer>nhà văn(đệm);

mydoc.Chấp nhận(nhà văn);

// In đầu ra
giờ::Giá cả <<đệm.GetString() <<giờ::endl;

trở lại 0;
}

Phần kết luận

Trong bài viết này, chúng tôi đã thảo luận ngắn gọn về JSON dữ liệu, đối tượng, mảng và cú pháp. Như chúng ta đã biết, không có giải pháp gốc nào để phân tích cú pháp dữ liệu JSON trong C ++; chúng tôi đã sử dụng hai thư viện khác nhau để phân tích cú pháp dữ liệu JSON trong C ++. Chúng tôi đã xem xét ba ví dụ khác nhau để chứng minh cơ chế phân tích cú pháp dữ liệu JSON trong C ++. So với thư viện nlohmann, RapidJSON nhỏ, nhanh và thân thiện với bộ nhớ.