我正在尝试将C ++代码中的JSON发送到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解析异常:无效的UTF-8中间字节0xdd;
我尝试为编译器命令行选项设置/ utf8和/ validate-charset,但无济于事。
如果我只使用不带参数的j.dump(),它将引发异常,提示“如果存储在JSON值中的字符串不是UTF-8编码的,则为type_error.316”。在我的文本编辑器中,选择了“自动检测不带签名的UTF-8编码”。
同一段代码可以用Java很好地编写,我正在尝试使其成为C ++版本。
编辑:添加了有关LogType和AliveLog的更多信息