Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将QString转换为JSON_Json_Qt_Qstring - Fatal编程技术网

将QString转换为JSON

将QString转换为JSON,json,qt,qstring,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-&

我有以下资料:

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等中

做这件事最好的方法是什么


谢谢。

在Qt5中,您可以使用
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;
}

不幸的是,Qt5的json代码需要在Qt4下进行一系列修改才能编译。

我将回答这个问题,因为您使用的是Qt4.8,而Qt5无法提供QJsonObject

我用的正是这个。这是一个易于使用的库,使用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);

我想在Qt5之前处理JSON并不容易?@Luke:qt只是没有提供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);