将QString转换为JSON

时间:2014-01-16 23:08:54

标签: json qt qstring

我有以下内容:

QString notebookid = ui->notebookid->toPlainText();
QString tagid = ui->tagid->toPlainText();
QString userid = ui->userid->toPlainText();
QString subject = ui->subject->toPlainText();
QString comment = ui->comment->toPlainText();

我需要将它们转换为JSON,其中键是notebookid,tagid等,值在ui-> notebookid等中。

这样做最好的方法是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

我会根据您使用Qt 4.8并且不会从Qt5获得QJsonObject的事实来回答这个问题。

我正是使用QJSON。它是一个易于使用的库,使用QVariants来解析和序列化数据。

这将是您使用QJSON将数据转换为json的方式:

QVariantMap jsonMap;
jsonMap.insert("notebookid", notebookid);
jsonMap.insert("tagid", tagid);
jsonMap.insert("userid", userid );
jsonMap.insert("subject", subject );
jsonMap.insert("comment", comment);

QJson::Serializer serializer;
bool ok;
QByteArray json = serializer.serialize(jsonMap, &ok);
assert (ok);

答案 1 :(得分:0)

在Qt 5中,您可以使用QJsonObject。一种方法是明确选择要序列化的控件:

QJsonObject MyDialog::serialize() const {
  QJsonObject json;
  json.insert("notebookid", ui->notebookid->toPlainText());
  ...
  return json;
}

另一种方法是使用使用Qt元数据的通用序列化程序。然后序列化每个命名控件的用户属性:

QJsonObject serializeDialog(const QWidget * dialog) {
    QJsonObject json;
    foreach (QWidget * widget, dialog->findChildren<QWidget*>()) {
        if (widget->objectName().isEmpty()) continue;
        QMetaProperty prop = widget->metaObject()->userProperty();
        if (! prop.isValid()) continue;
        QJsonValue val(QJsonValue::fromVariant(prop.read(widget)));
        if (val.isUndefined()) continue;
        json.insert(widget->objectName(), val);
    }
    return json;
}

您可以将QJsonDocument转换为文字,如下所示:

QJsonDocument doc(serializeDialog(myDialog));
QString jsonText = QString::fromUtf8(doc.toJson());

不幸的是,Qt 5的json代码需要在Qt 4下进行一系列更改。