Mam następujący plik JSON:

{
    "users":[
        {"nom":"123",
        "name":"John",
        "family":"ala",
        "cash":1000
    }
    ,{"nom":"456",
        "name":"Joe",
        "family":"ala",
        "cash":1000
    }
    ,{"nom":"131",
        "name":"David",
        "family":"ala",
        "cash":1000
    }]
}

Chciałbym zmienić gotówkę John.

W ten sposób próbuję to osiągnąć:

 QFile f("file address ...");
     f.open(QIODevice::ReadOnly|QIODevice::Text|QIODevice::WriteOnly);
       QByteArray b=f.readAll();
       QJsonDocument d=QJsonDocument::fromJson(b);
       QJsonObject o=d.object();

       for (int i=0;i<o["users"].toArray().size();i++) {
          if(o["users"].toArray()[i].toObject()["name"].toString()=="John")
          o["users"].toArray()[i].toObject()["cash"].toInt()=2000;//error unable to assign
            }

Jednak pojawia się następujący błąd:

Błąd: Nie można przypisać

Jak to naprawić?

0
Lily 26 lipiec 2020, 14:30

1 odpowiedź

Najlepsza odpowiedź

Przyczyna

Otrzymasz błąd, ponieważ próbujesz przypisać wartość do wartości powrotu funkcji ({x0}} w tym przypadku).

Rozwiązanie

Przypisz wartość QJsonValue, jak pokazano w JSON Save Game Przykład:

void Character::write(QJsonObject &json) const
{
    json["name"] = mName;
    json["level"] = mLevel;
    json["classType"] = mClassType;
}

Przykład

Oto przykład, który napisałem, aby zademonstrować, w jaki sposób można zmienić Twój kod w celu wdrożenia proponowanego rozwiązania:

#include <QApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFile file("data.json");

    if (file.open(QFile::ReadOnly | QFile::Text)) {
        QJsonObject json = QJsonDocument::fromJson(file.readAll()).object();
        QJsonArray users = json["users"].toArray();

        file.close();

        for (auto user : users) {
            QJsonObject userObj = user.toObject();

            if (userObj["name"].toString() == "John")
                userObj["cash"] = 2000;

            user = userObj;
        }

        qDebug() << users;
    }

    return a.exec();
}

Wynik

Podany przykład wytwarza następujący wynik:

QJsonArray([{"cash":2000,"family":"ala","name":"John","nom":"123"},{"cash":1000,"family":"ala","name":"Joe","nom":"456"},{"cash":1000,"family":"ala","name":"David","nom":"131"}])

Należy pamiętać, że cash dla John jest ustawiony na 2000.

2
scopchanov 26 lipiec 2020, 13:53