Skip to content

Commit ebb25e6

Browse files
committedDec 20, 2018
improve value conversion to json-string
1 parent 9ff514b commit ebb25e6

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed
 

‎src/gui/editorwidgets/qgslistwidgetfactory.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,5 @@ QgsEditorConfigWidget *QgsListWidgetFactory::configWidget( QgsVectorLayer *vl, i
4444
unsigned int QgsListWidgetFactory::fieldScore( const QgsVectorLayer *vl, int fieldIdx ) const
4545
{
4646
const QgsField field = vl->fields().field( fieldIdx );
47-
return ( field.type() == QVariant::List || field.type() == QVariant::StringList || field.typeName().compare( QLatin1String( "json" ), Qt::CaseInsensitive ) == 0 || field.typeName() == QLatin1String( "jsonb" ) ) && field.subType() != QVariant::Invalid ? 20 : 0;
47+
return ( field.type() == QVariant::List || field.type() == QVariant::StringList || QVariant::Map ) && field.subType() != QVariant::Invalid ? 20 : 0;
4848
}

‎src/providers/ogr/qgsogrprovider.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,14 +1408,17 @@ OGRGeometryH QgsOgrProvider::ConvertGeometryIfNecessary( OGRGeometryH hGeom )
14081408
return OGR_G_ForceTo( hGeom, layerGeomType, nullptr );
14091409
}
14101410

1411-
QString QgsOgrProvider::jsonStringValue( const QVariant &value )
1411+
QString QgsOgrProvider::jsonStringValue( const QVariant &value, const QVariant::Type &type )
14121412
{
1413-
QString stringValue = QString::fromUtf8( QJsonDocument::fromVariant( value.toMap() ).toJson().data() );
1414-
if ( stringValue == QStringLiteral( "{\n}\n" ) )
1415-
stringValue = QString::fromUtf8( QJsonDocument::fromVariant( value.toList() ).toJson().data() );
1416-
if ( stringValue == QStringLiteral( "[\n]\n" ) && !value.toString().isEmpty() )
1417-
stringValue = value.toString();
1418-
return stringValue;
1413+
switch ( type )
1414+
{
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();
1421+
}
14191422
}
14201423

14211424
bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags )
@@ -1547,7 +1550,7 @@ bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags )
15471550

15481551
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
15491552
if ( OGR_Fld_GetSubType( fldDef ) == OFSTJSON )
1550-
stringValue = jsonStringValue( attrVal );
1553+
stringValue = jsonStringValue( attrVal, attrVal.type() );
15511554
else
15521555
{
15531556
stringValue = attrVal.toString();
@@ -2136,7 +2139,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap &attr_
21362139
QString stringValue;
21372140
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
21382141
if ( OGR_Fld_GetSubType( fd ) == OFSTJSON )
2139-
stringValue = jsonStringValue( it2.value() );
2142+
stringValue = jsonStringValue( it2.value(), it2->type() );
21402143
else
21412144
stringValue = it2->toString();
21422145
#else

‎src/providers/ogr/qgsogrprovider.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,8 @@ class QgsOgrProvider : public QgsVectorDataProvider
284284

285285
mutable QStringList mSubLayerList;
286286

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

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

0 commit comments

Comments
 (0)
Please sign in to comment.