将 JSON 文本文件转换回 QJsonArray
Posted
技术标签:
【中文标题】将 JSON 文本文件转换回 QJsonArray【英文标题】:Converting JSON text file back to QJsonArray 【发布时间】:2018-11-28 14:52:45 【问题描述】:我有一个对象,我使用下面的代码将它序列化为 JSON(另见结构):
struct RegisterItem
RegisterType Type = RegisterType::ReadWrite;
QString Name = QStringLiteral("REGISTER");
int Bank = 0;
int Address = 0;
int Range = 1;
int DefaultValue = 0;
int CurrentValue = 0;
int SpecialAction = REG_SPECIAL_ACTION_NONE;
;
此代码将其转换为 json 文本文件:
bool saveRegisterStateToFile(const QVector<RegisterWidget*>& widgets)
QJsonArray arr;
for(int i = 0; i < widgets.size(); i++)
RegisterItem item = widgets[i]->registerItem();
auto data = QJsonObject(
qMakePair(QString("Address"), QJsonValue(item.Address)),
qMakePair(QString("Name"), QJsonValue(item.Name)),
qMakePair(QString("Bank"), QJsonValue(item.Bank)),
qMakePair(QString("Type"), QJsonValue(static_cast<int>(item.Type))),
qMakePair(QString("DefaultValue"), QJsonValue(item.DefaultValue)),
qMakePair(QString("SpecialAction"), QJsonValue(item.SpecialAction))
);
arr.push_back(data);
QFile file("json.txt");
file.open(QFile::WriteOnly);
file.write(QJsonDocument(arr).toJson());
这一切正常并生成 json 文件...它看起来像这样(前几行):
[
"Address": 0,
"Bank": 0,
"DefaultValue": 0,
"Name": "V_ADC_IN",
"SpecialAction": 0,
"Type": 3
,
"Address": 1,
"Bank": 0,
"DefaultValue": 0,
"Name": "V_ADC_SCALE",
"SpecialAction": 0,
"Type": 3
,
"Address": 2,
"Bank": 0,
现在,我需要反其道而行之……但我的 json 对象大小始终为 0!有什么问题?
QFile file(url);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString raw = file.readAll();
file.close();
QJsonDocument doc = QJsonDocument::fromJson(raw.toUtf8());
QJsonObject obj = doc.object();
QJsonArray arr = obj[""].toArray();
【问题讨论】:
我相信你必须调用QJsonArray array = doc.array();
,因为你的***对象是一个数组。
@vahancho 这也给出了数组中的 0 个元素
【参考方案1】:
您的对象没有标识符...因此您需要按数组中的位置进行访问。像这样的:
QJsonDocument doc = QJsonDocument::fromJson(raw.toUtf8());
QJsonArray arr = doc.array(); // get array representation of the doc
for(int i = 0; i < arr.size(); i++)
QJsonValue val = arr.at(i);
// The following line should thoritically prin the Name field
qDebug() << val.toObject().value("Name");
【讨论】:
以上是关于将 JSON 文本文件转换回 QJsonArray的主要内容,如果未能解决你的问题,请参考以下文章
更新 QJsonArray 中的值并写回 Qt 中的 Json 文件
如何将格式化文本存储在 oracle 表中并将其加载回 json?