如何在QT中将JSON字符串格式化为可读输出

7

我有一个JSON字符串

{
"FirstName": "John",
"LastName": "Doe",
"Age": 43,
"Address": {
    "Street": "Downing Street 10",
    "City": "London",
    "Country": "Great Britain"
},
"Phone numbers": [
    "+44 1234567",
    "+44 2345678"
]
}

在QString变量中,我在Stackoverflow上找到了一种格式化XML的方法:

QString responseData = "";
responseData = networkResponse->readAll();

QString formattedXMLResponse;
QDomDocument input;
input.setContent(responseData);
QDomDocument output(input);
QTextStream stream(&formattedXMLResponse);
output.save(stream, 2);

ui->outputTB->setPlainText(formattedXMLResponse);

但是这段代码只适用于XML格式。你有什么想法可以格式化JSON吗?
3个回答

16

QJsonDocumenttoJson函数可以接受一个格式参数,允许您指定压缩或缩进格式

假设您已经有了一个名为jsonObj的QJsonObject中的JSON:

QJsonDocument doc(jsonObj);
QString jsonString = doc.toJson(QJsonDocument::Indented);

或者,使用QString:

QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8());
QString formattedJsonString = doc.toJson(QJsonDocument::Indented);

只是我花了大约10分钟才弄清楚Qt想告诉我的是什么鬼。 - Andrii Muzychuk

1

抱歉翻出旧帖,但这将是最好的解决方案:

示例JSON对象:

QJsonObject json;
    json["name"] = "Hakan";
    json["age"] = 25;
    json["address"] = QJsonObject{{"street", "Sarıyer"}, {"city", "İstanbul"}};

printJson(json);

格式化器:

void printJson(QJsonObject json){
    QJsonDocument doc(json);
    QString jsonString = doc.toJson(QJsonDocument::Indented);
    qDebug() << jsonString.toStdString().c_str();
}

输出:

{
    "address": {
        "city": "İstanbul",
        "street": "Sarıyer"
    },
    "age": 25,
    "name": "Hakan"
}

1
如果您使用Qt 4,可以使用QJson库。
在这种情况下,使用方法如下:
QJson::Parser parser;
bool ok;

QVariantMap result = parser.parse (responseData, &ok).toMap();
if (!ok) {
  qFatal("An error occurred during parsing");
  exit (1);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接