我试图在qt 5.1中为json启动一个包装类,我正在研究一个函数,该函数将检查输入的var是QVariantMap还是QVariant,一切顺利,直到第二个muli dimen数组的水平。这是我的数组结构和类代码。
JsonHelper jh;
QVariantMap obj = jh.getJsonObjectVarientMap(data);
这引起了我的问题,当我只使用“obj”或“obj [”1“]”没有问题,只有当我
// obj["4"]["3"] this causes the problems
qDebug() << "Your returned val is : " << jh.keySearchVal(obj["4"]["3"],arr_index_txt);
QMap<QString,QVariant> mp = obj["4"].toMap();
foreach(QString key,mp.keys())
{
// this works ok
qDebug() << "key : " << key << " : val : " << mp[key];
}
QVariantMap JsonHelper::getJsonObjectVarientMap(QString in)
{
QJsonDocument d = QJsonDocument::fromJson(in.toUtf8());
return d.object().toVariantMap();
}
QVariant JsonHelper::keySearchVal(QVariant source, QString key)
{
QString type(source.typeName());
if(type=="QVariantMap")
{
QMap<QString, QVariant> map = source.toMap();
foreach(QString key_inner,map.keys())
{
QVariant in = map[key_inner];
if(key_inner==key)
{
return getVariantVal(in);
}
}
}
return "";
}
QVariant JsonHelper::keySearchVal(QVariantMap source, QString key)
{
foreach(QString key_inner,source.keys())
{
if(key_inner==key)
{
return source[key_inner];
}
}
return "";
}
QVariant JsonHelper::getVariantVal(QVariant in)
{
qDebug() << "from variant";
QString type(in.typeName());
if(type=="QVariantMap")
{
return in.toMap();
}
return in;
}
答案 0 :(得分:1)
// obj [“4”] [“3”]导致问题
这是无效的,因为QVariant
没有operator []重载。这也是编译器试图用这个告诉你的东西:
'operator []'不匹配(操作数类型为'QVariant'和'const char [2]')QVariant / QVariantMap
如果是底层数据类型,则需要将任何嵌套的QVariant显式转换为QVariantMap。有关详细信息,请参阅following method:
QMap QVariant :: toMap()const
如果变量具有type()QMetaType :: QVariantMap,则将变量作为QMap返回;否则返回一张空地图。
这不是重点,但您还有两个问题:
您似乎使用Varient一词而不是Variant。
您的代码缺少错误检查和转化报告等。