Skip to content

Commit a6f8db1

Browse files
committed
use general json conversion because it works for the different types
like QVariantMap, QVariantHash, QVariantList or QStringList as fallback still the QString conversion is available
1 parent 386c16f commit a6f8db1

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

src/providers/ogr/qgsogrprovider.cpp

+8-10
Original file line numberDiff line numberDiff line change
@@ -1408,17 +1408,15 @@ OGRGeometryH QgsOgrProvider::ConvertGeometryIfNecessary( OGRGeometryH hGeom )
14081408
return OGR_G_ForceTo( hGeom, layerGeomType, nullptr );
14091409
}
14101410

1411-
QString QgsOgrProvider::jsonStringValue( const QVariant &value, const QVariant::Type &type ) const
1411+
QString QgsOgrProvider::jsonStringValue( const QVariant &value ) const
14121412
{
1413-
switch ( type )
1413+
QString stringValue = QString::fromUtf8( QJsonDocument::fromVariant( value ).toJson().constData() );
1414+
if ( stringValue.isEmpty() )
14141415
{
1415-
case QVariant::Map:
1416-
return QString::fromUtf8( QJsonDocument::fromVariant( value.toMap() ).toJson().data() );
1417-
case QVariant::List:
1418-
return QString::fromUtf8( QJsonDocument::fromVariant( value.toList() ).toJson().data() );
1419-
default:
1420-
return value.toString();
1416+
//store as string, because it's no valid QJson value
1417+
stringValue = value.toString();
14211418
}
1419+
return stringValue;
14221420
}
14231421

14241422
bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags )
@@ -1550,7 +1548,7 @@ bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags )
15501548

15511549
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
15521550
if ( OGR_Fld_GetSubType( fldDef ) == OFSTJSON )
1553-
stringValue = jsonStringValue( attrVal, attrVal.type() );
1551+
stringValue = jsonStringValue( attrVal );
15541552
else
15551553
{
15561554
stringValue = attrVal.toString();
@@ -2139,7 +2137,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap &attr_
21392137
QString stringValue;
21402138
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
21412139
if ( OGR_Fld_GetSubType( fd ) == OFSTJSON )
2142-
stringValue = jsonStringValue( it2.value(), it2->type() );
2140+
stringValue = jsonStringValue( it2.value() );
21432141
else
21442142
stringValue = it2->toString();
21452143
#else

src/providers/ogr/qgsogrprovider.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,8 @@ class QgsOgrProvider : public QgsVectorDataProvider
284284

285285
mutable QStringList mSubLayerList;
286286

287-
//! converts \a value from json QVariant to QString regarding to \a type
288-
QString jsonStringValue( const QVariant &value, const QVariant::Type &type ) const;
287+
//! converts \a value from json QVariant to QString
288+
QString jsonStringValue( const QVariant &value ) const;
289289

290290
bool addFeaturePrivate( QgsFeature &f, QgsFeatureSink::Flags flags );
291291
//! Deletes one feature

0 commit comments

Comments
 (0)