Tengo el siguiente archivo 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
    }]
}

Me gustaría cambiar el efectivo de John.

Así es como estoy tratando de lograr esto:

 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
            }

Sin embargo, recibo el siguiente error:

error: no se puede asignar

¿Cómo arreglar esto?

0
Lily 26 jul. 2020 a las 14:30

1 respuesta

La mejor respuesta

Porque

Obtiene el error porque está intentando asignar un valor al valor de retorno de una función (QJsonValue::toInt en este caso).

Solución

Asigne el valor a QJsonValue, como se muestra en Ejemplo de partida guardada JSON:

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

Ejemplo

Aquí hay un ejemplo que he escrito para usted, con el fin de demostrar cómo se podría cambiar su código para implementar la solución propuesta:

#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();
}

Resultado

El ejemplo dado produce el siguiente resultado:

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"}])

Tenga en cuenta que cash para John está configurado en 2000.

2
scopchanov 26 jul. 2020 a las 13:53