diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapter.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapter.java index 87ea8818..f547706a 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapter.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapter.java @@ -103,13 +103,23 @@ public class JsonToQRecordAdapter { QRecord record = new QRecord(); - for(QFieldMetaData field : table.getFields().values()) + if(table == null) { - String fieldSource = mapping == null ? field.getName() : String.valueOf(mapping.getFieldSource(field.getName())); - // todo - so if the mapping didn't say how to map this field, does that mean we should use the default name for the field? - if(jsonObject.has(fieldSource)) + jsonObject.keys().forEachRemaining(key -> { - record.setValue(field.getName(), (Serializable) jsonObject.get(fieldSource)); + record.setValue(key, jsonObject.optString(key)); + }); + } + else + { + for(QFieldMetaData field : table.getFields().values()) + { + String fieldSource = mapping == null ? field.getName() : String.valueOf(mapping.getFieldSource(field.getName())); + // todo - so if the mapping didn't say how to map this field, does that mean we should use the default name for the field? + if(jsonObject.has(fieldSource)) + { + record.setValue(field.getName(), (Serializable) jsonObject.get(fieldSource)); + } } } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapterTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapterTest.java index 17d09492..7ee9cafe 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapterTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapterTest.java @@ -164,6 +164,29 @@ class JsonToQRecordAdapterTest extends BaseTest + /******************************************************************************* + ** + *******************************************************************************/ + @Test + public void test_buildRecordsFromJsonWithoutTable_inputList() + { + JsonToQRecordAdapter jsonToQRecordAdapter = new JsonToQRecordAdapter(); + List qRecords = jsonToQRecordAdapter.buildRecordsFromJson(""" + [ + { "firstName":"Tyler", "last":"Samples" }, + { "firstName":"Tim", "lastName":"Chamberlain" } + ] + """, null, null); + assertNotNull(qRecords); + assertEquals(2, qRecords.size()); + assertEquals("Tyler", qRecords.get(0).getValue("firstName")); + assertEquals("Samples", qRecords.get(0).getValue("last")); + assertEquals("Tim", qRecords.get(1).getValue("firstName")); + assertEquals("Chamberlain", qRecords.get(1).getValue("lastName")); + } + + + /******************************************************************************* ** *******************************************************************************/