从Json读取和保存数据

时间:2018-07-04 16:19:55

标签: c++ json qt

我有一个.json文档,其中包含要从程序中重新加载的数据。看起来像这样:

{
    "0 - Demanda": 100,
    "0.1 - Ref. Temporal Demanda": "Mensual",
    "1 - Tiempo de Suministro": 2,
    "1.1 - Ref. Temporal Ts": "Diario",
    "2 - Coste de Posesion": 20,
    "2.1 - Ref. Temporal Cp": "Semanal",
    "2.2 - Tipo de Coste de Posesion": "Dependiente",
    "3 - Coste Unitario de Emision": 20,
    "4 - Precio Unitario de compra": 30
}

要获取此数据,我分别填充了QLineEdit,QComboBox和QCheckBox,现在我想读取使用以下代码生成的文件:

void WResultados_Basico::on_pushButtonGuardar_clicked()
{
    QJsonObject recordObject;
    recordObject.insert("0 - Demanda", QJsonValue::fromVariant(d.demanda_original));   //d.anything is class with data
    recordObject.insert("0.1 - Ref. Temporal Demanda", QJsonValue::fromVariant(d.ref_demanda));
    recordObject.insert("1 - Tiempo de Suministro", QJsonValue::fromVariant(d.Ts_original));
    recordObject.insert("1.1 - Ref. Temporal Ts", QJsonValue::fromVariant(d.ref_Ts));
    recordObject.insert("2 - Coste de Posesion", QJsonValue::fromVariant(d.Cp_original));
    recordObject.insert("2.1 - Ref. Temporal Cp", QJsonValue::fromVariant(d.ref_Cp));
    recordObject.insert("2.2 - Tipo de Coste de Posesion", QJsonValue::fromVariant(d.Tipo_Cp));
    recordObject.insert("3 - Coste Unitario de Emision", QJsonValue::fromVariant(d.Ce));
    recordObject.insert("4 - Precio Unitario de compra", QJsonValue::fromVariant(d.PrecioUCompra));

    QJsonDocument doc(recordObject);
    qDebug() << doc.toJson();

   QByteArray ba=doc.toJson();
   QFile fid;
   fid.setFileName("DatosBasico.json");

   if (fid.open(QIODevice::WriteOnly))
   {
        fid.write(ba);
        fid.close();
   }
}

所以,我的目标是用我读取的数据填充相应的ComboBox等。也许像这样的事情可能有用,但是我不知道如何为每个单独的值分配变量:

{
    QFile fid;
    QByteArray ba;
    fid.open("DatosBasico.json"::ReadOnly);
    ba=fid.readAll();
    doc.fromByteArray(ba);
    fid.close();
}

感谢您的帮助和耐心

1 个答案:

答案 0 :(得分:0)

我最终这样做了,它可以正常工作,看起来很恐怖,可能超级无效,但是...却可以工作:)

void Basico::on_pushButtonCargar_clicked()
{
    QFile file("DatosBasico.json");
    //Leer el archivoo que tiene el Json
    if(!file.open(QFile::ReadOnly)){
        qDebug()<< "Error, No se puede abrir el fichero.";
        return;
    }

    QJsonDocument jsonDoc = QJsonDocument::fromJson(file.readAll());
    d.demanda = jsonDoc.object().value("0 - Demanda").toDouble();
    d.ref_demanda = jsonDoc.object().value("0.1 - Ref. Temporal Demanda").toString();
    d.Ts = jsonDoc.object().value("1 - Tiempo de Suministro").toDouble();
    d.ref_Ts = jsonDoc.object().value("1.1 - Ref. Temporal Ts").toString();
    d.Cp = jsonDoc.object().value("2 - Coste de Posesion").toDouble();
    d.ref_Cp = jsonDoc.object().value("2.1 - Ref. Temporal Cp").toString();
    d.Tipo_Cp = jsonDoc.object().value("2.2 - Tipo de Coste de Posesion").toString();
    d.Ce = jsonDoc.object().value("3 - Coste Unitario de Emision").toDouble();
    d.PrecioUCompra = jsonDoc.object().value("4 - Precio Unitario de compra").toDouble();
    file.close();

    QString demanda_cargada=QString::number(d.demanda);
    ui->lineEditDemanda->setText(demanda_cargada);

    ui->comboBoxDemanda->setCurrentText(d.ref_demanda);

    QString Ts_cargado=QString::number(d.Ts);
    ui->lineEditTS->setText(Ts_cargado);

    ui->comboBoxTS->setCurrentText(d.ref_Ts);

    QString Cp_cargado=QString::number(d.Cp);
    ui->lineEditCP->setText(Cp_cargado);

    ui->comboBoxCP->setCurrentText(d.ref_Cp);

    if (d.Tipo_Cp == "Dependiente")
    {
        ui->checkBoxDependiente->click();
    }

    if (d.Tipo_Cp == "Independiente")
    {
        ui->checkBoxIndependiente->click();
    }

    QString CE_cargado=QString::number(d.Ce);
    ui->lineEditCe->setText(CE_cargado);

    QString PUC_cargado=QString::number(d.PrecioUCompra);
    ui->lineEditPrecioUCompra->setText(PUC_cargado);
}