mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
improve value conversion to json-string
This commit is contained in:
parent
9ff514b9be
commit
ebb25e6b49
src
@ -44,5 +44,5 @@ QgsEditorConfigWidget *QgsListWidgetFactory::configWidget( QgsVectorLayer *vl, i
|
|||||||
unsigned int QgsListWidgetFactory::fieldScore( const QgsVectorLayer *vl, int fieldIdx ) const
|
unsigned int QgsListWidgetFactory::fieldScore( const QgsVectorLayer *vl, int fieldIdx ) const
|
||||||
{
|
{
|
||||||
const QgsField field = vl->fields().field( fieldIdx );
|
const QgsField field = vl->fields().field( fieldIdx );
|
||||||
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;
|
return ( field.type() == QVariant::List || field.type() == QVariant::StringList || QVariant::Map ) && field.subType() != QVariant::Invalid ? 20 : 0;
|
||||||
}
|
}
|
||||||
|
@ -1408,14 +1408,17 @@ OGRGeometryH QgsOgrProvider::ConvertGeometryIfNecessary( OGRGeometryH hGeom )
|
|||||||
return OGR_G_ForceTo( hGeom, layerGeomType, nullptr );
|
return OGR_G_ForceTo( hGeom, layerGeomType, nullptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QgsOgrProvider::jsonStringValue( const QVariant &value )
|
QString QgsOgrProvider::jsonStringValue( const QVariant &value, const QVariant::Type &type )
|
||||||
{
|
{
|
||||||
QString stringValue = QString::fromUtf8( QJsonDocument::fromVariant( value.toMap() ).toJson().data() );
|
switch ( type )
|
||||||
if ( stringValue == QStringLiteral( "{\n}\n" ) )
|
{
|
||||||
stringValue = QString::fromUtf8( QJsonDocument::fromVariant( value.toList() ).toJson().data() );
|
case QVariant::Map:
|
||||||
if ( stringValue == QStringLiteral( "[\n]\n" ) && !value.toString().isEmpty() )
|
return QString::fromUtf8( QJsonDocument::fromVariant( value.toMap() ).toJson().data() );
|
||||||
stringValue = value.toString();
|
case QVariant::List:
|
||||||
return stringValue;
|
return QString::fromUtf8( QJsonDocument::fromVariant( value.toList() ).toJson().data() );
|
||||||
|
default:
|
||||||
|
return value.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags )
|
bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags )
|
||||||
@ -1547,7 +1550,7 @@ bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags )
|
|||||||
|
|
||||||
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
|
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
|
||||||
if ( OGR_Fld_GetSubType( fldDef ) == OFSTJSON )
|
if ( OGR_Fld_GetSubType( fldDef ) == OFSTJSON )
|
||||||
stringValue = jsonStringValue( attrVal );
|
stringValue = jsonStringValue( attrVal, attrVal.type() );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stringValue = attrVal.toString();
|
stringValue = attrVal.toString();
|
||||||
@ -2136,7 +2139,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap &attr_
|
|||||||
QString stringValue;
|
QString stringValue;
|
||||||
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
|
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
|
||||||
if ( OGR_Fld_GetSubType( fd ) == OFSTJSON )
|
if ( OGR_Fld_GetSubType( fd ) == OFSTJSON )
|
||||||
stringValue = jsonStringValue( it2.value() );
|
stringValue = jsonStringValue( it2.value(), it2->type() );
|
||||||
else
|
else
|
||||||
stringValue = it2->toString();
|
stringValue = it2->toString();
|
||||||
#else
|
#else
|
||||||
|
@ -284,8 +284,8 @@ class QgsOgrProvider : public QgsVectorDataProvider
|
|||||||
|
|
||||||
mutable QStringList mSubLayerList;
|
mutable QStringList mSubLayerList;
|
||||||
|
|
||||||
//! convert from json QVariant to QString
|
//! converts \a value from json QVariant to QString regarding to \a type
|
||||||
QString jsonStringValue( const QVariant &value );
|
QString jsonStringValue( const QVariant &value, const QVariant::Type &type );
|
||||||
|
|
||||||
bool addFeaturePrivate( QgsFeature &f, QgsFeatureSink::Flags flags );
|
bool addFeaturePrivate( QgsFeature &f, QgsFeatureSink::Flags flags );
|
||||||
//! Deletes one feature
|
//! Deletes one feature
|
||||||
|
Loading…
x
Reference in New Issue
Block a user