我想使用内置的Qt 5.2.0功能(Windows7,Qt5.2.0,MinGW4.8)将QVariantMap保存为JSON。 QJsonDocument似乎无法处理QPoint类型,尽管它们已成功编码为QVariant。这是一个例子:
int main()
{
QPoint point(23, 42);
QVariantMap settings;
settings["point"] = point;
qDebug() << settings;
QJsonDocument json;
json = QJsonDocument::fromVariant(settings);
qDebug() << json;
}
这会产生以下输出:
QMap(("point", QVariant(QPoint, QPoint(23,42) ) ) )
QJsonDocument({"point": null})
point
json
为什么null
?有关内置数据类型的JSON编码有哪些限制?
答案 0 :(得分:1)
您无法将任何数据类型直接序列化为JSON。你需要做一些手工工作。
例如,要序列化,您可以执行一些简单的操作,例如使用自定义表示法转换为QString
:
#include <QCoreApplication>
#include <QVariantMap>
#include <QPoint>
#include <QPointF>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
int main(int argc, char *argv[])
{
Q_UNUSED(argc)
Q_UNUSED(argv)
QPoint point(23, 42);
//QPointF point(3234.23, 3423.22);
//QString point = "sdfsdf";
QVariantMap settings;
settings["point"] = QString("(%1, %2)").arg(point.x()).arg(point.y());
QJsonObject jsonobj = QJsonObject::fromVariantMap(settings);
QJsonDocument json = QJsonDocument(jsonobj);
qDebug() << settings;
qDebug() << jsonobj.toVariantMap();
qDebug() << json;
}
示例结果:
QMap(("point", QVariant(QString, "(23, 42)") ) )
QMap(("point", QVariant(QString, "(23, 42)") ) )
QJsonDocument({"point": "(23, 42)"})
要反序列化,你需要多做一点,但应该同样容易。
JSON is a format to store structured data. It has 6 basic data types:
* bool
* double
* string
* array
* object
* null