Разбор массива JSON с помощью Qt - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь написать настольный клиент с Qt для сайта онлайн-словаря .Я застрял на чем-то о JSON.

http://ac.tureng.co/?c=?&t=expensive

?(["expensive","expensive habits","expensive medical equipment","expensive question","expensive watch","expensive-looking","expensively","expensiveness"]);

Я думаю, что данные, которые приходят с вышеуказанного адреса, являются массивом JSON.json.org имеет следующее описание:

Массив - это упорядоченная коллекция значений.Массив начинается с [(левая скобка) и заканчивается] (правая скобка).Значения разделяются, (запятая). *

Также допустимый JSON в соответствии с JSON Formatter , если вместо первого вопроса записана строкаmark:

a([  
   "expensive",
   "expensive habits",
   "expensive medical equipment",
   "expensive question",
   "expensive watch",
   "expensive-looking",
   "expensively",
   "expensiveness"
]);

Но этого изменения недостаточно для JSONLint сайта:

["expensive", "expensive habits", "expensive medical equipment", "expensive question", "expensive watch", "expensive-looking", "expensively", "expensiveness"]

Я хочу показывать предложения пользователю при вводе пользователем, используяданные отсюда.Пока я не могу извлечь JSON, поэтому я достиг желаемого поведения, действуя как обычный текст.Есть ли способ сделать это правильно, анализируя JSON?

Коды, которые я написал до сих пор:

    QString turengOneriMetin = QString("http://ac.tureng.co/?c=?&t=%1").arg(arg1);
    QUrl turengOneri(turengOneriMetin);

    QNetworkAccessManager manager;
    QNetworkReply *response = manager.get(QNetworkRequest(turengOneri));
    QEventLoop event;
    connect(response, SIGNAL(finished()), &event, SLOT(quit()));
    event.exec();
    QString content = response->readAll();

    content.replace(0,1,"a");

    content = content.replace("a([", "").replace("]);", "").replace("\"","");


    QStringList wordList;

    wordList << content.split(",");

    ui->label->setText(content);

    // https://stackoverflow.com/questions/24248606/how-to-accomplish-drop-down-word-suggestions-in-qt
    QCompleter *completer = new QCompleter(wordList, this);
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    ui->lineEdit->setCompleter(completer);

Обновление: После получения JSON правильнос помощью ответов и других ресурсов я сделал то, что хотел, с помощью следующего фрагмента кода:

QJsonDocument document = QJsonDocument::fromJson(content.toUtf8());
QJsonArray documentArray = document.array();

QStringList wordList;

for (const QJsonValue &i : documentArray)
{
    //qInfo() << i.toString() << endl;
    wordList << i.toString();
}

1 Ответ

0 голосов
/ 15 октября 2018

Я думаю, что URL должен быть таким - http://ac.tureng.co/?t=expensive

В этом случае вы получите действительный JSON.

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