@@ -1408,14 +1408,17 @@ OGRGeometryH QgsOgrProvider::ConvertGeometryIfNecessary( OGRGeometryH hGeom )
1408
1408
return OGR_G_ForceTo ( hGeom, layerGeomType, nullptr );
1409
1409
}
1410
1410
1411
- QString QgsOgrProvider::jsonStringValue ( const QVariant &value )
1411
+ QString QgsOgrProvider::jsonStringValue ( const QVariant &value, const QVariant::Type &type )
1412
1412
{
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
+ }
1419
1422
}
1420
1423
1421
1424
bool QgsOgrProvider::addFeaturePrivate ( QgsFeature &f, Flags flags )
@@ -1547,7 +1550,7 @@ bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags )
1547
1550
1548
1551
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
1549
1552
if ( OGR_Fld_GetSubType ( fldDef ) == OFSTJSON )
1550
- stringValue = jsonStringValue ( attrVal );
1553
+ stringValue = jsonStringValue ( attrVal, attrVal. type () );
1551
1554
else
1552
1555
{
1553
1556
stringValue = attrVal.toString ();
@@ -2136,7 +2139,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap &attr_
2136
2139
QString stringValue;
2137
2140
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
2138
2141
if ( OGR_Fld_GetSubType ( fd ) == OFSTJSON )
2139
- stringValue = jsonStringValue ( it2.value () );
2142
+ stringValue = jsonStringValue ( it2.value (), it2-> type () );
2140
2143
else
2141
2144
stringValue = it2->toString ();
2142
2145
#else
0 commit comments