在递归函数中补充字段到对象数组中,你可以使用递归遍历每个对象,并在每个对象上添加新的字段。
下面是一个示例代码:
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
void addFieldToObjectsInArray(QJsonArray& jsonArray, const QString& field, const QVariant& value)
{
for (int i = 0; i < jsonArray.size(); ++i)
{
if (jsonArray[i].isObject())
{
QJsonObject jsonObject = jsonArray[i].toObject();
// 添加新字段到当前对象
jsonObject[field] = QJsonValue::fromVariant(value);
jsonArray[i] = jsonObject;
// 递归调用以处理嵌套的对象数组
addFieldToObjectsInArray(jsonObject.value(field).toArray(), field, value);
}
}
}
int main()
{
// 原有的 JSON 数据(包含对象数组)
QByteArray jsonByteArray = R"(
{
"students": [
{
"name": "John",
"age": 20,
"subjects": [
{
"name": "Math",
"score": 90
},
{
"name": "Science",
"score": 85
}
]
},
{
"name": "Jane",
"age": 22,
"subjects": [
{
"name": "English",
"score": 95
},
{
"name": "History",
"score": 88
}
]
}
]
}
)";
// 解析 JSON 数据为 QJsonObject
QJsonParseError parseError;
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonByteArray, &parseError);
if (parseError.error != QJsonParseError::NoError || !jsonDoc.isObject())
{
qDebug() << "无法解析 JSON 数据";
return 1;
}
QJsonObject jsonObj = jsonDoc.object();
// 获取学生列表的 JSON 数组
QJsonArray studentsArray = jsonObj["students"].toArray();
// 添加新字段到学生对象数组中的每个对象
addFieldToObjectsInArray(studentsArray, "city", "New York");
// 更新原始 JSON 对象中的学生列表数组
jsonObj["students"] = studentsArray;
// 将修改后的 JSON 对象转换回 JSON 数据
jsonDoc.setObject(jsonObj);
QByteArray updatedJsonData = jsonDoc.toJson(QJsonDocument::Indented);
qDebug() << "更新后的 JSON 数据:\n" << updatedJsonData;
return 0;
}
这个示例代码会递归遍历每个对象,并在每个对象上添加一个名为”city”的新字段。它还处理嵌套的对象数组,确保在所有级别上都补充字段。
希望这个示例对你有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问