@@ -806,19 +806,37 @@ void TestQgsField::convertCompatible()
806
806
QVariant vZero = 0 ;
807
807
QVERIFY ( intField.convertCompatible ( vZero ) );
808
808
809
- // Test json field conversion
810
- const QgsField jsonField ( QStringLiteral ( " json" ), QVariant::String, QStringLiteral ( " json" ) );
811
- QVariant jsonValue = QVariant::fromValue ( QVariantList () << 1 << 5 << 8 );
812
- QVERIFY ( jsonField.convertCompatible ( jsonValue ) );
813
- QCOMPARE ( jsonValue.type (), QVariant::String );
814
- QCOMPARE ( jsonValue, QString ( " [1,5,8]" ) );
815
- QVariantMap variantMap;
816
- variantMap.insert ( QStringLiteral ( " a" ), 1 );
817
- variantMap.insert ( QStringLiteral ( " c" ), 3 );
818
- jsonValue = QVariant::fromValue ( variantMap );
819
- QVERIFY ( jsonField.convertCompatible ( jsonValue ) );
820
- QCOMPARE ( jsonValue.type (), QVariant::String );
821
- QCOMPARE ( jsonValue, QString ( " {\" a\" :1,\" c\" :3}" ) );
809
+ // Test string-based json field conversion
810
+ {
811
+ const QgsField jsonField ( QStringLiteral ( " json" ), QVariant::String, QStringLiteral ( " json" ) );
812
+ QVariant jsonValue = QVariant::fromValue ( QVariantList () << 1 << 5 << 8 );
813
+ QVERIFY ( jsonField.convertCompatible ( jsonValue ) );
814
+ QCOMPARE ( jsonValue.type (), QVariant::String );
815
+ QCOMPARE ( jsonValue, QString ( " [1,5,8]" ) );
816
+ QVariantMap variantMap;
817
+ variantMap.insert ( QStringLiteral ( " a" ), 1 );
818
+ variantMap.insert ( QStringLiteral ( " c" ), 3 );
819
+ jsonValue = QVariant::fromValue ( variantMap );
820
+ QVERIFY ( jsonField.convertCompatible ( jsonValue ) );
821
+ QCOMPARE ( jsonValue.type (), QVariant::String );
822
+ QCOMPARE ( jsonValue, QString ( " {\" a\" :1,\" c\" :3}" ) );
823
+ }
824
+
825
+ // Test map-based json field (i.e. OGR geopackage JSON fields) conversion
826
+ {
827
+ const QgsField jsonField ( QStringLiteral ( " json" ), QVariant::Map, QStringLiteral ( " json" ) );
828
+ QVariant jsonValue = QVariant::fromValue ( QVariantList () << 1 << 5 << 8 );
829
+ QVERIFY ( jsonField.convertCompatible ( jsonValue ) );
830
+ QCOMPARE ( jsonValue.type (), QVariant::List );
831
+ QCOMPARE ( jsonValue, QVariantList () << 1 << 5 << 8 );
832
+ QVariantMap variantMap;
833
+ variantMap.insert ( QStringLiteral ( " a" ), 1 );
834
+ variantMap.insert ( QStringLiteral ( " c" ), 3 );
835
+ jsonValue = QVariant::fromValue ( variantMap );
836
+ QVERIFY ( jsonField.convertCompatible ( jsonValue ) );
837
+ QCOMPARE ( jsonValue.type (), QVariant::Map );
838
+ QCOMPARE ( jsonValue, variantMap );
839
+ }
822
840
823
841
// geometry field conversion
824
842
const QgsField geometryField ( QStringLiteral ( " geometry" ), QVariant::UserType, QStringLiteral ( " geometry" ) );
0 commit comments