From 2bb5b79c8a31d079dfce1f7826bc39e41df6dbac Mon Sep 17 00:00:00 2001 From: Steven Winship <39765413+stevenwinship@users.noreply.github.com> Date: Thu, 25 Jun 2026 13:32:49 -0400 Subject: [PATCH 1/3] Experimental dataset JSON GET API returns multi-valued fields as arrays --- .../9495-return-multi-valued-fields-as-arrays.md | 3 +++ src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java | 4 ++-- src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 doc/release-notes/9495-return-multi-valued-fields-as-arrays.md diff --git a/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md b/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md new file mode 100644 index 00000000000..c5ecbc10ae3 --- /dev/null +++ b/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md @@ -0,0 +1,3 @@ +## Bug ## + +API GET /api/datasets/{id}/metadata now returns all multivalued fields as arrays instead of String for 1 entry and Array for more than 1 entry. This consistancy makes parsing the JSON easier for users of the API. diff --git a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java index 1e8fe184566..1e259cca63b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java @@ -490,9 +490,9 @@ public static JsonValue getJsonLDForField(DatasetField field, Boolean excludeEma vals.add(child); } } - // Add metadata value to aggregation, suppress array when only one value + // Add metadata value to aggregation, suppress array when multiples not allowed JsonArray valArray = vals.build(); - return (valArray.size() != 1) ? valArray : valArray.get(0); + return (dfType.isAllowMultiples()) ? valArray : valArray.get(0); } private static void addCvocValue(String val, JsonArrayBuilder vals, JsonObject cvocEntry, diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java index 583a76f07a7..290e495b2db 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java @@ -3658,6 +3658,7 @@ public void testSemanticMetadataAPIs() { // Get the metadata with the semantic api Response response = UtilIT.getDatasetJsonLDMetadata(datasetId, apiToken); + response.prettyPrint(); response.then().assertThat().statusCode(OK.getStatusCode()); // Compare the metadata with an expected value - the metadatablock entries // should be the same but there will be additional fields with values related to @@ -3822,6 +3823,7 @@ public void testReCreateDataset() { // Get the semantic metadata Response response = UtilIT.getDatasetJsonLDMetadata(datasetId, apiToken); + response.prettyPrint(); response.then().assertThat().statusCode(OK.getStatusCode()); response.prettyPeek(); String expectedString = getData(response.getBody().asString()); From b8a67acbfef300cfcc374bc4441326d74be35c75 Mon Sep 17 00:00:00 2001 From: Steven Winship <39765413+stevenwinship@users.noreply.github.com> Date: Thu, 25 Jun 2026 14:30:53 -0400 Subject: [PATCH 2/3] update OREMap format version --- src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java index 1e259cca63b..e867d80af4b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java @@ -47,7 +47,7 @@ public class OREMap { public static final String NAME = "OREMap"; //NOTE: Update this value whenever the output of this class is changed - private static final String DATAVERSE_ORE_FORMAT_VERSION = "Dataverse OREMap Format v1.0.3"; + private static final String DATAVERSE_ORE_FORMAT_VERSION = "Dataverse OREMap Format v1.0.4"; //v1.0.1 - added versionNote private static final String DATAVERSE_SOFTWARE_NAME = "Dataverse"; private static final String DATAVERSE_SOFTWARE_URL = "https://github.com/iqss/dataverse"; From 3e3fed75ac8d690b241d1971d55af8458634cc56 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 2 Jul 2026 10:29:41 -0400 Subject: [PATCH 3/3] Update 9495-return-multi-valued-fields-as-arrays.md There are two affected endpoints, and the version specific one returns JSON-LD (affected by this PR) or JSON (not affected), depending on what MimeType the user requests. --- .../9495-return-multi-valued-fields-as-arrays.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md b/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md index c5ecbc10ae3..2a91036d9eb 100644 --- a/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md +++ b/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md @@ -1,3 +1 @@ -## Bug ## - -API GET /api/datasets/{id}/metadata now returns all multivalued fields as arrays instead of String for 1 entry and Array for more than 1 entry. This consistancy makes parsing the JSON easier for users of the API. +When calling (GET) the /api/datasets/{id}/metadata endpoint or requesting JSON-LD (application/ld+json) from the /api/datasets/{id}/versions/{versionId}/metadata endpoint, all multivalued fields as arrays instead of String for 1 entry and Array for more than 1 entry. This consistancy makes parsing the JSON-LD as JSON easier for users of the API.