diff --git a/src/main/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapter.java b/src/main/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapter.java index cf88f286..b10297ac 100644 --- a/src/main/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapter.java +++ b/src/main/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapter.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.List; import com.kingsrook.qqq.backend.core.model.actions.AbstractQFieldMapping; import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData; import com.kingsrook.qqq.backend.core.utils.JsonUtils; import com.kingsrook.qqq.backend.core.utils.StringUtils; @@ -40,7 +41,7 @@ public class JsonToQRecordAdapter if(JsonUtils.looksLikeObject(json)) { JSONObject jsonObject = JsonUtils.toJSONObject(json); - rs.add(buildRecordFromJsonObject(jsonObject)); + rs.add(buildRecordFromJsonObject(jsonObject, table, mapping)); } else if(JsonUtils.looksLikeArray(json)) { @@ -49,7 +50,7 @@ public class JsonToQRecordAdapter { if(object instanceof JSONObject jsonObject) { - rs.add(buildRecordFromJsonObject(jsonObject)); + rs.add(buildRecordFromJsonObject(jsonObject, table, mapping)); } else { @@ -75,15 +76,20 @@ public class JsonToQRecordAdapter /******************************************************************************* ** private method to build one QRecord from one jsonObject ** - ** todo - meta-data validation, mapping, type handling + ** todo - meta-data validation, type handling *******************************************************************************/ - private QRecord buildRecordFromJsonObject(JSONObject jsonObject) + private QRecord buildRecordFromJsonObject(JSONObject jsonObject, QTableMetaData table, AbstractQFieldMapping mapping) { QRecord record = new QRecord(); - for(String key : jsonObject.keySet()) + for(QFieldMetaData field : table.getFields().values()) { - record.setValue(key, (Serializable) jsonObject.get(key)); + 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)); + } } return (record); diff --git a/src/main/java/com/kingsrook/qqq/backend/core/model/actions/QKeyBasedFieldMapping.java b/src/main/java/com/kingsrook/qqq/backend/core/model/actions/QKeyBasedFieldMapping.java index 45e9d2e1..b6491cb5 100644 --- a/src/main/java/com/kingsrook/qqq/backend/core/model/actions/QKeyBasedFieldMapping.java +++ b/src/main/java/com/kingsrook/qqq/backend/core/model/actions/QKeyBasedFieldMapping.java @@ -18,7 +18,7 @@ public class QKeyBasedFieldMapping extends AbstractQFieldMapping /******************************************************************************* ** Get the source field (e.g., name that's in the CSV header or the input json - ** object) corresponding to a propery qqq table fieldName. + ** object) corresponding to a proper qqq table fieldName. ** *******************************************************************************/ @Override diff --git a/src/test/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapterTest.java b/src/test/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapterTest.java index 46d8c953..e5b786cb 100644 --- a/src/test/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapterTest.java +++ b/src/test/java/com/kingsrook/qqq/backend/core/adapters/JsonToQRecordAdapterTest.java @@ -104,14 +104,14 @@ class JsonToQRecordAdapterTest JsonToQRecordAdapter jsonToQRecordAdapter = new JsonToQRecordAdapter(); List qRecords = jsonToQRecordAdapter.buildRecordsFromJson(""" { - "field1":"value1", - "field2":"value2" + "firstName":"Joe", + "lastName":"Dimagio" } """, TestUtils.defineTablePerson(), null); assertNotNull(qRecords); assertEquals(1, qRecords.size()); - assertEquals("value1", qRecords.get(0).getValue("field1")); - assertEquals("value2", qRecords.get(0).getValue("field2")); + assertEquals("Joe", qRecords.get(0).getValue("firstName")); + assertEquals("Dimagio", qRecords.get(0).getValue("lastName")); } @@ -125,16 +125,16 @@ class JsonToQRecordAdapterTest JsonToQRecordAdapter jsonToQRecordAdapter = new JsonToQRecordAdapter(); List qRecords = jsonToQRecordAdapter.buildRecordsFromJson(""" [ - { "field1":"value1", "field2":"value2" }, - { "fieldA":"valueA", "fieldB":"valueB" } + { "firstName":"Tyler", "lastName":"Samples" }, + { "firstName":"Tim", "lastName":"Chamberlain" } ] """, TestUtils.defineTablePerson(), null); assertNotNull(qRecords); assertEquals(2, qRecords.size()); - assertEquals("value1", qRecords.get(0).getValue("field1")); - assertEquals("value2", qRecords.get(0).getValue("field2")); - assertEquals("valueA", qRecords.get(1).getValue("fieldA")); - assertEquals("valueB", qRecords.get(1).getValue("fieldB")); + assertEquals("Tyler", qRecords.get(0).getValue("firstName")); + assertEquals("Samples", qRecords.get(0).getValue("lastName")); + assertEquals("Tim", qRecords.get(1).getValue("firstName")); + assertEquals("Chamberlain", qRecords.get(1).getValue("lastName")); }