@@ -470,7 +470,8 @@ QgsOgrProvider::QgsOgrProvider( QString const &uri, const ProviderOptions &optio
470
470
<< QgsVectorDataProvider::NativeType( tr( " Whole number (integer)" ), QStringLiteral( " integer" ), QVariant::Int, 0, nMaxIntLen )
471
471
<< QgsVectorDataProvider::NativeType( tr( " Whole number (integer 64 bit)" ), QStringLiteral( " integer64" ), QVariant::LongLong, 0, nMaxInt64Len )
472
472
<< QgsVectorDataProvider::NativeType( tr( " Decimal number (real)" ), QStringLiteral( " double" ), QVariant::Double, 0, nMaxDoubleLen, 0, nMaxDoublePrec )
473
- << QgsVectorDataProvider::NativeType( tr( " Text (string)" ), QStringLiteral( " string" ), QVariant::String, 0, 65535 );
473
+ << QgsVectorDataProvider::NativeType( tr( " Text (string)" ), QStringLiteral( " string" ), QVariant::String, 0, 65535 )
474
+ << QgsVectorDataProvider::NativeType( tr( " Map (json)" ), QStringLiteral( " json" ), QVariant::Map, -1, -1, -1, -1, QVariant::String );
474
475
475
476
bool supportsDate = true ;
476
477
bool supportsTime = mGDALDriverName != QLatin1String( " ESRI Shapefile" ) && mGDALDriverName != QLatin1String( " GPKG" );
@@ -1009,6 +1010,7 @@ void QgsOgrProvider::loadFields()
1009
1010
OGRFieldSubType ogrSubType = OFSTNone;
1010
1011
1011
1012
QVariant::Type varType;
1013
+ QVariant::Type varSubType;
1012
1014
switch ( ogrType )
1013
1015
{
1014
1016
case OFTInteger:
@@ -1041,6 +1043,18 @@ void QgsOgrProvider::loadFields()
1041
1043
break ;
1042
1044
1043
1045
case OFTString:
1046
+ if ( OGR_Fld_GetSubType ( fldDef ) == OFSTJSON )
1047
+ {
1048
+ ogrSubType = OFSTJSON;
1049
+ QgsDebugMsg ( QStringLiteral ( " JSON Field found" ) );
1050
+ varType = QVariant::Map;
1051
+ varSubType = QVariant::String;
1052
+ }
1053
+ else
1054
+ {
1055
+ varType = QVariant::String;
1056
+ }
1057
+ break ;
1044
1058
default :
1045
1059
varType = QVariant::String; // other unsupported, leave it as a string
1046
1060
}
@@ -1081,7 +1095,7 @@ void QgsOgrProvider::loadFields()
1081
1095
#else
1082
1096
textEncoding ()->toUnicode ( typeName.toStdString ().c_str () ),
1083
1097
#endif
1084
- width, prec
1098
+ width, prec, QString (), varSubType
1085
1099
);
1086
1100
1087
1101
// check if field is nullable
0 commit comments