From 87628fe3e2507c9c8bd105df9c6f7502682ea9d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Sun, 29 Jan 2023 23:09:37 +0100 Subject: [PATCH] patch open map state in json builder --- src/main/java/org/xbib/marc/json/JsonBuilder.java | 4 ++++ src/main/java/org/xbib/marc/json/MarcJsonWriter.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/org/xbib/marc/json/JsonBuilder.java b/src/main/java/org/xbib/marc/json/JsonBuilder.java index 9eb95a1..23746f3 100644 --- a/src/main/java/org/xbib/marc/json/JsonBuilder.java +++ b/src/main/java/org/xbib/marc/json/JsonBuilder.java @@ -156,6 +156,10 @@ public class JsonBuilder { return appendable.toString(); } + void patchOpenMapState() { + state.first = false; + } + private void beginKey(String k) throws IOException { if (state.first) { state.first = false; diff --git a/src/main/java/org/xbib/marc/json/MarcJsonWriter.java b/src/main/java/org/xbib/marc/json/MarcJsonWriter.java index 1b7cc9e..fad895a 100644 --- a/src/main/java/org/xbib/marc/json/MarcJsonWriter.java +++ b/src/main/java/org/xbib/marc/json/MarcJsonWriter.java @@ -312,6 +312,8 @@ public class MarcJsonWriter extends MarcContentHandler implements Flushable, Clo /** * Write MARC record using fields, indicators, and subfield structures, * therefore allowing duplicate keys in the output. + * Duplicate keys are rejected by Elasticsearch. + * * @param marcRecord the MARC record * @throws IOException if writing fails */ @@ -371,6 +373,8 @@ public class MarcJsonWriter extends MarcContentHandler implements Flushable, Clo /** * Write MARC record from underlying map as key-oriented JSON. Use repeat maps to create lists. + * Because no duplicate keyes are generated, this is the variant for Elasticsearch. + * * @param marcRecord the MARC record * @throws IOException if writing fails */ @@ -521,6 +525,8 @@ public class MarcJsonWriter extends MarcContentHandler implements Flushable, Clo } if (!style.contains(Style.EMBEDDED_RECORD)) { sb.append('}'); + } else { + jsonBuilder.patchOpenMapState(); } writer.write(sb.toString()); }