Boost.JSON 是一個 C++ JSON parser 函式庫, 提供了雖然不是最快但是也足夠快的執行效率、以及雖然不是最方便但是足以滿足使用者需要的便利使用方式, 就綜合條件來說,我認為是十分優秀的 C++ JSON parser 函式庫。 他有二個使用方式,第一種需要連結函式庫:
#include <boost/json.hpp>
第二種是 header-only:
#include <boost/json/src.hpp>
下面是從一個字串分析 JSON 的測試:
#include <boost/json.hpp>
#include <iostream>
#include <string>
namespace json = boost::json;
int main() {
const std::string json_str = R"(
{
"user": "johndoe",
"id": 12345,
"active": true,
"numbers": [1, 2, 3, 4, 5]
}
)";
// Parse the JSON string
json::value data = json::parse(json_str);
// Access the values
std::string username = json::value_to<std::string>(data.at("user"));
int user_id = json::value_to<int>(data.at("id"));
bool is_active = json::value_to<bool>(data.at("active"));
std::cout << "Username: " << username << std::endl;
std::cout << "ID: " << user_id << std::endl;
std::cout << "Active: " << (is_active ? "Yes" : "No") << std::endl;
// For array
json::array &arr = data.at("numbers").as_array();
std::vector<int> numbers;
for (auto const &value : arr) {
numbers.push_back(json::value_to<int>(value));
}
std::cout << "Parsed Numbers: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
使用 CMake 編譯,CMakeLists.txt 的內容如下:
cmake_minimum_required(VERSION 3.18)
project(parse)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
find_package(Boost 1.89.0 REQUIRED CONFIG COMPONENTS json)
add_executable(parse parse.cpp)
target_link_libraries(parse PRIVATE Boost::json)
如果採用 header-only 的方式,CMakeLists.txt 的內容如下:
cmake_minimum_required(VERSION 3.18)
project(parse)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
find_package(Boost 1.89.0 REQUIRED CONFIG COMPONENTS)
add_executable(parse parse.cpp)
target_link_libraries(parse)
下面是建立 JSON 內容的測試:
#include <boost/json.hpp>
#include <iostream>
#include <string>
namespace json = boost::json;
int main() {
// Create a JSON object
json::object obj;
obj["user"] = "johndoe";
obj["id"] = 12345;
obj["active"] = true;
// Create a JSON array
json::array numbers;
numbers.push_back(1);
numbers.push_back(2);
numbers.push_back(3);
numbers.push_back(4);
numbers.push_back(5);
obj["numbers"] = numbers;
// Serialize the object to a string
std::string serialized_json = json::serialize(obj);
std::cout << "Generated JSON: " << serialized_json << std::endl;
return 0;
}
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。