Qt QJsonObject多层嵌套结构如何正确获取深层value值?
如何获取多层嵌套Qt QJsonObject中嵌套字段的值?
嘿,我来帮你搞定这个Qt嵌套JSON取值的问题!你之前尝试的obj.value("y", "value")写法行不通,因为QJsonObject::value()方法只接受单个键名参数,没办法直接跨多层嵌套取值,得一层一层解析才行。
针对你给出的示例JSON对象:
QJsonObject o { {"x", QJsonObject { {"value", 1} }}, {"y", QJsonObject { {"value", 2} }} };
这里有几种靠谱的写法可以拿到y对应的value值(也就是2):
方法1:链式调用value() + toObject()
这是最稳妥的方式,先取出"y"对应的嵌套对象,再从中取出"value"字段:
int number = o.value("y").toObject().value("value").toInt();
o.value("y"):获取键"y"对应的QJsonValue.toObject():把这个QJsonValue转换为QJsonObject(因为我们知道它是对象类型).value("value").toInt():从嵌套对象中取出"value"并转为int类型
方法2:使用[]运算符(谨慎使用)
如果确定所有键都存在,也可以用更简洁的[]运算符:
int number = o["y"].toObject()["value"].toInt();
⚠️ 注意:如果某个键不存在,QJsonObject::operator[]会自动插入一个空的QJsonObject到原对象中,可能会修改原始数据,所以不确定键是否存在时不建议用这个写法。
方法3:安全判断写法(避免空指针/无效值)
如果担心键不存在导致程序出错,可以先做存在性检查:
int number = 0; // 默认值 if (o.contains("y")) { QJsonObject yObj = o["y"].toObject(); if (yObj.contains("value")) { number = yObj["value"].toInt(); } } // 此时number就是2(如果键都存在的话)
这样就能顺利拿到你想要的number = 2啦!
内容的提问来源于stack exchange,提问作者Felipebros
相关产品推荐
相关产品推荐

