QJsonObject存储longlong丢失精度
时间: 2023-11-15 09:04:26 浏览: 46
你好!关于QJsonObject存储long long类型丢失精度的问题,我可以为你提供一些建议。
在Qt中,QJsonObject是用来存储JSON对象的类。然而,QJsonObject的value函数返回的是QJsonValue类型,它只能存储一些基本数据类型,如字符串、整数、浮点数等,并不支持long long类型。
如果你需要存储long long类型的数据并保持精度,可以考虑以下两种方法:
1. 将long long类型转换为字符串进行存储:你可以使用QString::number()函数将long long类型转换为字符串,然后将其作为QJsonValue存储在QJsonObject中。在需要使用该值时,可以使用QString::toLongLong()函数将其还原为long long类型。
示例代码如下:
```cpp
QJsonObject jsonObject;
long long value = 1234567890123456789LL;
jsonObject["key"] = QString::number(value);
// 从QJsonObject中获取存储的值
QString stringValue = jsonObject["key"].toString();
long long restoredValue = stringValue.toLongLong();
```
2. 自定义数据类型:如果你需要频繁地存储和读取long long类型的数据,可以考虑创建一个自定义的数据类型,将其转换为可序列化的形式,并在需要时进行反序列化。
示例代码如下:
```cpp
struct LongLongData
{
qint64 value;
// 序列化
QJsonObject toJson() const
{
QJsonObject json;
json["value"] = QString::number(value);
return json;
}
// 反序列化
static LongLongData fromJson(const QJsonObject& json)
{
LongLongData data;
data.value = json["value"].toString().toLongLong();
return data;
}
};
// 使用自定义数据类型
QJsonObject jsonObject;
LongLongData data;
data.value = 1234567890123456789LL;
jsonObject["key"] = data.toJson();
// 从QJsonObject中获取存储的值
LongLongData restoredData = LongLongData::fromJson(jsonObject["key"].toObject());
long long restoredValue = restoredData.value;
```
希望这些方法能够帮助到你!如果你还有其他问题,请随时提问。