我目前正在使用Qt5.0和核心QJson库来处理我正在开发的程序的一些数据.
要为此问题设置场景,我将为您提供一些说明我的问题的JSON数据:
{
"CLOCKS": [
{
"ID": "clk",
"MAX": 2e+08,
"MIN": 1e+07,
"VALUE": "no_clock"
},
{
"ID": "memclk",
"MAX": 2e+08,
"MIN": 1e+07,
"VALUE": "memclk"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这里我们有一个包含单个键'CLOCKS'的父QJsonObject.此键的值是QJsonObject的QJsonArray,它包含许多包含我的数据的键/值对.
如果我想检索id为'clk'的QJsonObject,我目前正在使用这样的代码:
// imagine m_data is my parent QJsonObject
QJsonArray clocks = m_data["CLOCKS"].toArray();
foreach (const QJsonValue & value, clocks) {
QJsonObject obj = value.toObject();
if (obj["ID"].toString() == "clk") {
return obj;
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,图书馆到目前为止一直很好.但是,当我想要获取用于修改的QJsonObject 引用而不是副本时,我最近开始遇到问题.
所以我的问题是,给定样本数据提供了如何获取QJsonObject引用以修改所需时钟数据对象中的键/值对.问题表明,IMO由于你可以获得QJsonValueRefs,它是对值条目的引用...但实际访问其中的数据(如果值是另一个数组/对象),你必须使用toArray转换(),toObject()函数等.此函数仅返回副本而不是引用,从而创建一个障碍,以使用引用向下迭代对象层次结构.
到目前为止,我想出来的唯一方法就是创建整个"CLOCKS"QJsonArray的副本,找到我想要的对象,然后将其删除并重新插入更改的数据......最后分配整个数组返回父对象中的"CLOCKS"键.这对我来说似乎很麻烦,我觉得我做错了什么,必须有更好的方法.
这里支持这个是我的代码到目前为止的样子...只是改变其中一个时钟QJsonObjects的"VALUE":
QJsonArray resets = m_data.value(TAG_RESETS).toArray();
// get a copy of the QJsonObject
QJsonObject obj;
foreach …Run Code Online (Sandbox Code Playgroud)