STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • 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";
    }
    0
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích.. Tìm hiểu thêm.

    Đề xuất

    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ý ...
    15/08/2015
    Đọ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++.
    28/09/2014

    Khám phá

    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 ...
    21/08/2015
    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 ...
    13/08/2015
    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 8: Hiện thực GameScene - Xử lý sự kiện trong game
    Hướng dẫn cách nhận các sự kiện từ người chơi và xử lý chúng theo logic ...
    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 ...
    Sử Dụng CSDL Hướng Đối Tượng DB4O với Android - Phần 2 Thực Hiện App Đơn Giản - Chương Trình Trắc Nghiệm
    Hướng dẫn xây dựng một chương trình trắc nghiệm đơn giản sử dụng hệ quản ...
    Xử Lý Sự Kiện Trong SDL
    Hướng dẫn xử lý sự kiện trong game bằng thư viện SDL.
    Đọ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++.
    04/08/2014
    Chỉ Thị Tiền Xử Lý trong C/C++
    Chỉ thị tiền xử lý là những chỉ thị cung cấp cho bộ tiền xử lý để xử lý ...
    10/08/2016
    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