Guide for using the meojson C++ JSON library in MaaEnd cpp-algo. Use when writing code that involves JSON parsing, serialization, struct jsonization (MEO_JSONIZATION), json::value manipulation, ext::jsonization custom type support, or custom recognition param parsing in agent/cpp-algo/.
meojson is a header-only C++ JSON library, provided via MaaFramework deps. Include via <meojson/json.hpp>.
| Type | Description |
|---|---|
json::value | Universal JSON value (null/bool/number/string/array/object) |
json::array | JSON array, wraps std::vector<json::value> |
json::object | JSON object, wraps std::map<std::string, json::value> |
#include <meojson/json.hpp>
// From string — returns std::optional<json::value>
auto opt = json::parse(str);
if (!opt) { /* parse failed */ }
// From file
auto opt = json::open("/path/to/file.json");
// JSONC (with comments)
auto opt = json::parsec(str);
cpp-algo 推荐模式 — 安全解析自定义识别参数:
template <typename T>
T ParseCustomRecognitionParam(const char* custom_recognition_param)
{
if (!custom_recognition_param || std::strlen(custom_recognition_param) == 0) {
return T {};
}
auto opt = json::parse(custom_recognition_param);
if (!opt) {
LogError << "failed to parse custom_recognition_param" << VAR(custom_recognition_param);
return T {};
}
T result {};
if (!result.from_json(*opt)) {
LogError << "failed to deserialize param" << VAR(custom_recognition_param);
return T {};
}
return result;
}
反模式:
json::parse(str).value_or(json::object {}).as<T>()——value_or静默吞掉 parse 失败;空 object 调as<T>()当T有 required 字段时会抛异常。