繁体   English   中英

QString替换引号之外的字符

[英]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);
}

结果

该示例产生以下结果:

具有已处理JSON的窗口

信用

特别感谢您为Some Programmer Dude (@Someprogrammerdude)纠正代码中的错误提供了宝贵的帮助:

https://stackoverflow.com/a/52402760/5366641

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM