QString替换引号之外的字符

时间:2018-09-19 06:47:48

标签: c++ qt

我当前正在将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));

1 个答案:

答案 0 :(得分:3)

解决方案

使用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);
}

结果

该示例将产生以下结果:

Window with the processed JSON

信用

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

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