STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • Bình luận
    • Sao chép

    Hướng Dẫn Sử Dụng RapidJSON để Xử Lý JSON trong C++

    Khái niệm về định dạng JSON và cách sử dụng RapidJSON để thao tác với định dạng JSON trong các dự án C++
    21/12/2014
    26/08/2020
    3 phút đọc
    Hướng Dẫn Sử Dụng RapidJSON để Xử Lý JSON trong C++

    JSON là một định dạng được sử dụng khá phổ biến hiện nay trong việc lưu trữ và trao đổi dữ liệu giữa các thành phần trong dự án. Việc sử dụng file JSON giúp chuẩn hóa cấu trúc của dữ liệu mà không cần quan tâm nhiều đến sự khác biệt giữa các ngôn ngữ lập trình.

    Trong C++ để đọc hay ghi dữ liệu vào file định dạng JSON lập trình viên có thể sử dụng nhiều phương pháp khác nhau như xử lý chuỗi thuần túy hoặc sử dụng một số thư viện, phần mềm hỗ trợ như: JSONKit, JSONBox, RapidJSON,... 

    Bài viết này nhằm giới thiệu một số khái niệm về định dạng JSON và cách sử dụng RapidJSON để thao tác với định dạng JSON trong các dự án C++.

    Giới thiệu JSON

    JSON (JavaScript Object Noattion) JSON là một định dạng được sử dụng khá phổ biến hiện nay trong việc lưu trữ và trao đổi dữ liệu giữa các thành phần trong dự án. JSON được định nghĩa dựa theo cấu trúc gồm tập hợp các phần tử, mỗi phần tử mang cặp giá trị key-value. Các value có thể là một số nguyên, số thập phân, chuỗi ký tự, mảng giá trị hay một phần tử con.

    {
        "id"         : 1,
        "name"       : "circle",
        "radius"     : 3.5,
        "array"      : [1, 5, 6, 8],
        "pos"        : {
                           "x" : 1.0,
                           "y" : 2.5
                       },
        "note" : null
    }
    

    Xử lý File JSON trong C++ bằng RapidJSON

    Cách tích hợp vào chương trình

    Download thư viện tại đây và copy vào thư mục project.

    Khai báo thư viện cần sử dụng, để phân tích và lấy dữ liệu từ JSON, sử dụng document.h:

    #include "rapidjson/document.h"
    
    using namespace rapidjson;
    

    Một số hàm cơ bản

    Để phân tích một chuỗi kí tự có định dạng JSON và truy vấn dữ liệu bên trong nó, tạo 1 đối tượng Document và đưa chuỗi cần phân tích vào Document theo cú pháp:

    const char* json = "{\"project\":\"stdio_demo\",\"id\":12}";
    Document d;
    d.Parse(json);
    

    d sẽ chứa toàn bộ thông tin về các phần tử trong chuỗi JSON ban đầu, để truy cập đến các phần tử, sử dụng cú pháp d["<key của phần tử>"].

    Sử dụng tham chiếu để truy vấn nhanh đến các key:

    Value &a = d["project"];
    

    Lấy giá trị

    Để truy vấn giá trị của phần tử với từ khóa tương ứng, sử dụng hàm Get[Kiểu dữ liệu].

    Ví dụ:

    • GetString() với giá trị kiểu chuỗi.
    • GetInt() với giá trị là số nguyên.
    • GetDouble() với giá trị là số thập phân.
    • GetArray() với giá trị là một mảng.
    • GetObject() với giá trị là một đối tượng JSON...
    d["project"].GetString()

    Kiểm tra hợp lệ

    Các giá trị có thể mang các kiểu dữ liệu khác nhau để tránh xảy ra lỗi khi truy vấn giá trị, RapidJSON hỗ trợ một số hàm sau:

    • HasMember("<key>"): trả về true nếu tồn tại key đó trong đối tượng JSON đang xét, ví dụ: d.HasMember("project") // trả về giá trị true
    • IsInt(): trả về true nếu giá trị của phần tử là số nguyên, ví dụ: d["project"].IsInt() // trả về giá trị false
    • IsString(): trả về true nếu giá trị của phần tử là chuỗi kí tự, ví dụ: d["project"].IsString() // trả về giá trị true

    Lấy giá trị trong mảng

    Để lấy giá trị của JSON dưới dạng mảng, sử dụng dòng lệnh for để truy cập đến từng phần tử trong mảng.

    Ví dụ để in tất cả giá trị của mảng ứng với key "array", sử dụng cú pháp:

    const Value& array = d["array"];
    
    for (SizeType i = 0; i < array.Size(); i++)
    {
    	cout << array[i].GetInt() << "\n";
    }

    Phù hợp cho bạn

    Đề xuất

    std::string và Xử Lý Chuỗi trong C++

    std::string và Xử Lý Chuỗi trong C++

    Giới thiệu và hướng dẫn sử dụng thư viện std::string trong C++ xử lý ...

    Modern C++C++98

    15/08/2015

    Đọc Ghi Tất Cả Các Định Dạng Ảnh với FreeImage trong C++

    Đọc Ghi Tất Cả Các Định Dạng Ảnh với FreeImage trong C++

    Hướng dẫn sử dụng FreeImage để đọc, ghi, xử lý ảnh trong C++.

    Vũ Quang Huy

    28/09/2014

    Khám phá thêm

    Hiện Thực và Sử Dụng Hàm strcmp - strcpy - strlen trong C/C++

    Hiện Thực và Sử Dụng Hàm strcmp - strcpy - strlen trong C/C++

    Hướng dẫn sử dụng hàm strlen để lấy độ dài chuỗi, hàm strcmp để so sánh ...

    Modern C++C++98

    21/08/2015

    9 Tính Năng Quan Trọng Trong C++11

    9 Tính Năng Quan Trọng Trong C++11

    C++11 là một phiên bản cải tiến và nâng cấp từ C++98 (hay các bạn vẫn ...

    Modern C++C++0x

    13/08/2015

    Sử Dụng CSDL Hướng Đối Tượng DB4O với Android

    Sử Dụng CSDL Hướng Đối Tượng DB4O với Android

    Hướng dẫn sử dụng thư viện cơ sở dữ liệu hướng đối tượng DB4O để phát ...

    Nguyễn Hồng Sơn

    13/03/2016

    Hướng Dẫn Sử Dụng Module Wifi ESP8266 v1 với Arduino Uno

    Hướng Dẫn Sử Dụng Module Wifi ESP8266 v1 với Arduino Uno

    ESP8266 là một chip tích hợp cao - System on Chip (SoC), có khả năng xử ...

    Điện Tử Ứng DụngESP module

    16/12/2014

    Xử Lý Sự Kiện Trong SDL

    Xử Lý Sự Kiện Trong SDL

    Hướng dẫn xử lý sự kiện trong game bằng thư viện SDL.

    Lập Trình GameSDL

    13/10/2015

    Đọc Ghi File Cơ Bản với fstream

    Đọc Ghi File Cơ Bản với fstream

    Sử dụng fstream để đọc file, ghi file, xử lý file đơn giản trong C++.

    Modern C++C++98

    04/08/2014

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020