[英]QString replace characters outside of quotes
我目前正在将json文件读取到QJsonDocument,然后将其转换为QString,如下所示:
"thing1":"thing1value",
"thing2":"thing2,value",
"thing3":"thing3value",
每行以逗号结尾,我想尝试对其进行一些格式设置,以便在没有引号的情况下向用户显示并在每行之后添加新行。 我试图使用replace函数用新行替换任何逗号。 问题在于,仅使用replace函数将所有逗号替换为\\ n,还意味着引号内的任何内容也将被更改,例如:
"thing2":"thing2
value"
有没有简单的方法可以在不触及内部的情况下更改报价的外部值? 对于我可以做的整体格式化,也许有更好的方法吗? 我感觉这在Qt上要花很多时间,我可能只需要编写一些函数,使indexOf可以找到第一个引用并将其跟踪到下一个等等。
到目前为止,这基本上是我所拥有的
QString jDoc = file.readAll();
file.close();
QJsonParseError parserError;
QJsonDocument jsonInit = QJsonDocument::fromJson(jDoc.toUtf8(), &parserError);
qDebug() << parserError.errorString();
QString strJson(jsonInit.toJson(QJsonDocument::Indented));
使用QString :: right检索值,然后使用QString :: arg将输出格式化为您喜欢的格式。
这是我为您准备的一个最小示例,说明如何实现此解决方案:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QJsonObject json {
{"thing1", "thing1value1"},
{"thing2", "thing2,value2"},
{"thing3", "thing3value3"}
};
QString newText;
foreach (const QString &key, json.keys()) {
const QJsonValue &value(json.value(key));
const QString &str(value.toString().mid(key.length()));
newText.append(QString("\"%1\":\"%1\n\%2\"").arg(key).arg(str.startsWith(",") ? str.mid(1) : str));
if (key != json.keys().last())
newText.append("\n\n");
}
auto *textBrowser = new QTextBrowser(this);
textBrowser->setText(newText);
setCentralWidget(textBrowser);
}
该示例产生以下结果:
特别感谢您为Some Programmer Dude (@Someprogrammerdude)纠正代码中的错误提供了宝贵的帮助:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.