@@ -476,8 +476,10 @@ QgsOgrProvider::QgsOgrProvider( QString const &uri, const ProviderOptions &optio
476
476
<< QgsVectorDataProvider::NativeType( tr( " Whole number (integer)" ), QStringLiteral( " integer" ), QVariant::Int, 0, nMaxIntLen )
477
477
<< QgsVectorDataProvider::NativeType( tr( " Whole number (integer 64 bit)" ), QStringLiteral( " integer64" ), QVariant::LongLong, 0, nMaxInt64Len )
478
478
<< QgsVectorDataProvider::NativeType( tr( " Decimal number (real)" ), QStringLiteral( " double" ), QVariant::Double, 0, nMaxDoubleLen, 0, nMaxDoublePrec )
479
- << QgsVectorDataProvider::NativeType( tr( " Text (string)" ), QStringLiteral( " string" ), QVariant::String, 0, 65535 )
480
- << QgsVectorDataProvider::NativeType( tr( " Map (JSON)" ), QStringLiteral( " JSON" ), QVariant::Map, 0, 0, 0, 0, QVariant::String );
479
+ << QgsVectorDataProvider::NativeType( tr( " Text (string)" ), QStringLiteral( " string" ), QVariant::String, 0, 65535 );
480
+
481
+ if ( mGDALDriverName == QLatin1String( " GPKG" ) )
482
+ nativeTypes << QgsVectorDataProvider::NativeType( tr( " Map (JSON)" ), QStringLiteral( " JSON" ), QVariant::Map, 0, 0, 0, 0, QVariant::String );
481
483
482
484
bool supportsDate = true ;
483
485
bool supportsTime = mGDALDriverName != QLatin1String( " ESRI Shapefile" ) && mGDALDriverName != QLatin1String( " GPKG" );
@@ -1053,7 +1055,6 @@ void QgsOgrProvider::loadFields()
1053
1055
if ( OGR_Fld_GetSubType ( fldDef ) == OFSTJSON )
1054
1056
{
1055
1057
ogrSubType = OFSTJSON;
1056
- QgsDebugMsg ( QStringLiteral ( " JSON Field found" ) );
1057
1058
varType = QVariant::Map;
1058
1059
varSubType = QVariant::String;
1059
1060
}
@@ -1407,6 +1408,16 @@ OGRGeometryH QgsOgrProvider::ConvertGeometryIfNecessary( OGRGeometryH hGeom )
1407
1408
return OGR_G_ForceTo ( hGeom, layerGeomType, nullptr );
1408
1409
}
1409
1410
1411
+ QString QgsOgrProvider::jsonStringValue ( const QVariant &value )
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;
1419
+ }
1420
+
1410
1421
bool QgsOgrProvider::addFeaturePrivate ( QgsFeature &f, Flags flags )
1411
1422
{
1412
1423
bool returnValue = true ;
@@ -1536,13 +1547,7 @@ bool QgsOgrProvider::addFeaturePrivate( QgsFeature &f, Flags flags )
1536
1547
1537
1548
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
1538
1549
if ( OGR_Fld_GetSubType ( fldDef ) == OFSTJSON )
1539
- {
1540
- stringValue = QString::fromUtf8 ( QJsonDocument::fromVariant ( attrVal.toMap () ).toJson ().data () );
1541
- if ( stringValue == QStringLiteral ( " {\n }\n " ) )
1542
- stringValue = QString::fromUtf8 ( QJsonDocument::fromVariant ( attrVal.toList () ).toJson ().data () );
1543
- if ( stringValue == QStringLiteral ( " [\n ]\n " ) && !attrVal.toString ().isEmpty () )
1544
- stringValue = attrVal.toString ();
1545
- }
1550
+ stringValue = jsonStringValue ( attrVal );
1546
1551
else
1547
1552
{
1548
1553
stringValue = attrVal.toString ();
@@ -2131,17 +2136,9 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap &attr_
2131
2136
QString stringValue;
2132
2137
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,4,0)
2133
2138
if ( OGR_Fld_GetSubType ( fd ) == OFSTJSON )
2134
- {
2135
- stringValue = QString::fromUtf8 ( QJsonDocument::fromVariant ( it2->toMap () ).toJson ().data () );
2136
- if ( stringValue == QStringLiteral ( " {\n }\n " ) )
2137
- stringValue = QString::fromUtf8 ( QJsonDocument::fromVariant ( it2->toList () ).toJson ().data () );
2138
- if ( stringValue == QStringLiteral ( " [\n ]\n " ) && !it2->toString ().isEmpty () )
2139
- stringValue = it2->toString ();
2140
- }
2139
+ stringValue = jsonStringValue ( it2.value () );
2141
2140
else
2142
- {
2143
2141
stringValue = it2->toString ();
2144
- }
2145
2142
#else
2146
2143
stringValue = it2->toString ();
2147
2144
#endif
0 commit comments