QString заменяет символы вне кавычек - PullRequest
0 голосов
/ 19 сентября 2018

В настоящее время я читаю в файле json файл QJsonDocument, а затем преобразую его в QString так, чтобы он выглядел следующим образом:

"thing1":"thing1value",

"thing2":"thing2,value",

"thing3":"thing3value",

Каждая строка заканчивается запятой, и я хотел бы попробовать иотформатируйте его немного, чтобы показать пользователю без кавычек и новую строку после каждой строки.Я пытался использовать функцию замены, чтобы заменить любые запятые на новую строку.Проблема в том, что просто использование функции замены для замены всех запятых на \ 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 голосов
/ 19 сентября 2018

Решение

Используйте 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...