diff --git a/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToJsonVisitor.java index 303bbc5db..244959083 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToJsonVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToJsonVisitor.java @@ -1,6 +1,7 @@ package li.strolch.model.json; import static java.util.Arrays.asList; +import static java.util.Comparator.comparing; import static li.strolch.model.Tags.Json.PARAMETER_BAGS; import static li.strolch.utils.helper.StringHelper.isNotEmpty; @@ -582,21 +583,18 @@ public class StrolchElementToJsonVisitor implements StrolchElementVisitor ignoredParamIds, ParameterBag parameterBag) { - - Set parameterKeySet = parameterBag.getParameterKeySet(); - for (String paramId : parameterKeySet) { + parameterBag.streamOfParameters().sorted(comparing(Parameter::getIndex)).forEach(param -> { + String paramId = param.getId(); // see if this parameter must be ignored if (ignoredParamIds != null && ignoredParamIds.contains(paramId)) - continue; + return; if (rootJ.has(paramId)) { throw new StrolchModelException( "JsonObject already has a member with ID " + paramId + ": " + parameterBag.getLocator()); } - Parameter param = parameterBag.getParameter(paramId); - StrolchValueType type = StrolchValueType.parse(param.getType()); if (type.isBoolean()) { rootJ.addProperty(paramId, (Boolean) param.getValue()); @@ -605,7 +603,7 @@ public class StrolchElementToJsonVisitor implements StrolchElementVisitor param = bag.getParameter(paramKey); - paramsJ.add(paramKey, paramToJsonFull(param)); - } + bag.streamOfParameters().sorted(comparing(Parameter::getIndex)) + .forEach(param -> paramsJ.add(param.getId(), paramToJsonFull(param))); if (this.bagHook != null) this.bagHook.accept(bag, bagJ);