从 JSON 读取和保存数据

Reading and saving data from a Json

本文关键字:保存 数据 读取 JSON      更新时间:2023-10-16

我有一个.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();
}

感谢您的帮助和耐心

我最终这样做了,它有效,看起来很可怕,而且可能超级无能为力,但是......它:)工作

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