我正在尝试将 JSON 从 C++ 代码发送到在 Java 上运行的 REST 服务。我正在使用 Visaul Studio 2019、nlohmann/json 库来序列化我的对象并使用 libcurl 来发出 HTTP 请求。
我有一个要序列化的以下对象:
typedef struct{
int ordinal;
std::string detail;
Level level;
} LogType
static const LogType ONLINE = {0, "Çevrimiçi", Level::INFO};
我使用这个 LogType 来填充 AliveLog 的一些成员(非常类似于 Java 枚举)。我使用以下内容对其进行序列化:
std::string AliveLog::getJSON(){
json j = json{
{"createdAt", createdAt},
{"id", id},
{"message", message},
{"detail", detail},
{"deviceId", deviceId},
{"type", type.ordinal},
{"level", level}
};
return j.dump(-1, ' ', false, json::error_handler_t::replace);
}
当我调用这个函数时,我得到一堆问号和 ½ 的“Çevrimdışı”应该在哪里。
我的 REST 服务也抛出异常 JSON parse error: Invalid UTF-8 middle byte 0xdd;
我尝试为编译器命令行选项设置 /utf8 和 /validate-charset 但无济于事。
如果我只使用不带参数的 j.dump() ,它会抛出一个异常“type_error.316 如果存储在 JSON 值中的字符串不是 UTF-8 编码的”。在我的文本编辑器中,我选择了“自动检测不带签名的 UTF-8 编码”。
这段代码用 Java 写得很好,我正在尝试制作它的 C++ 版本。
编辑:添加了有关 LogType 和 AliveLog 的更多信息