[sensorthings] Handle array results from Observations

Fixes #57577
This commit is contained in:
Nyall Dawson 2024-05-28 13:12:24 +10:00
parent 2a9a300161
commit a956041495

View File

@ -475,25 +475,54 @@ bool QgsSensorThingsSharedData::processFeatureRequest( QString &nextPage, QgsFee
if ( !json.contains( tag ) )
return QVariant();
const auto &jObj = json[tag];
if ( jObj.is_number_integer() )
std::function< QString( const basic_json<> &obj, bool &ok ) > objToString;
objToString = [&objToString]( const basic_json<> &obj, bool & ok ) -> QString
{
return QString::number( jObj.get<int>() );
ok = true;
if ( obj.is_number_integer() )
{
return QString::number( obj.get<int>() );
}
else if ( jObj.is_number_unsigned() )
else if ( obj.is_number_unsigned() )
{
return QString::number( jObj.get<unsigned>() );
return QString::number( obj.get<unsigned>() );
}
else if ( jObj.is_boolean() )
else if ( obj.is_boolean() )
{
return QString::number( jObj.get<bool>() );
return QString::number( obj.get<bool>() );
}
else if ( jObj.is_number_float() )
else if ( obj.is_number_float() )
{
return QString::number( jObj.get<double>() );
return QString::number( obj.get<double>() );
}
else if ( obj.is_array() )
{
QStringList results;
results.reserve( obj.size() );
for ( const auto &item : obj )
{
bool itemOk = false;
const QString itemString = objToString( item, itemOk );
if ( itemOk )
results.push_back( itemString );
}
return results.join( ',' );
}
else if ( obj.is_string() )
{
return QString::fromStdString( obj.get<std::string >() );
}
return QString::fromStdString( json[tag].get<std::string >() );
ok = false;
return QString();
};
const auto &jObj = json[tag];
bool ok = false;
const QString r = objToString( jObj, ok );
if ( ok )
return r;
return QVariant();
};
auto getDateTime = []( const basic_json<> &json, const char *tag ) -> QVariant