From cdaf17ea1ec359c2a8e1e77fcfdc7e8d273ea85b Mon Sep 17 00:00:00 2001 From: altrisi Date: Tue, 5 Jan 2021 02:42:02 +0100 Subject: [PATCH] JSON support tweaks --- src/main/java/carpet/script/api/Auxiliary.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/carpet/script/api/Auxiliary.java b/src/main/java/carpet/script/api/Auxiliary.java index 0fe2a643..7625ea94 100644 --- a/src/main/java/carpet/script/api/Auxiliary.java +++ b/src/main/java/carpet/script/api/Auxiliary.java @@ -73,6 +73,7 @@ import org.apache.commons.lang3.tuple.Triple; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; import java.util.ArrayList; import java.util.Arrays; @@ -91,7 +92,7 @@ import static java.lang.Math.min; public class Auxiliary { public static final String MARKER_STRING = "__scarpet_marker"; private static final Map mixerMap = Arrays.stream(SoundCategory.values()).collect(Collectors.toMap(SoundCategory::getName, k -> k)); - public static final Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeAdapter(Value.class, new ScarpetJsonDeserializer()).create(); + public static final Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().registerTypeAdapter(Value.class, new ScarpetJsonDeserializer()).create(); public static String recognizeResource(Value value, boolean isFloder) { @@ -822,7 +823,18 @@ public class Auxiliary { } else if (fdesc.getMiddle().equals("json")) { - JsonElement json = ((CarpetScriptHost) c.host).readJsonFile(fdesc.getLeft(), fdesc.getMiddle(), fdesc.getRight()); + JsonElement json; + try + { + json = ((CarpetScriptHost) c.host).readJsonFile(fdesc.getLeft(), fdesc.getMiddle(), fdesc.getRight()); + } + catch (JsonParseException e) + { + Throwable exception = e; + if(e.getCause() != null) + exception = e.getCause(); + throw new InternalExpressionException("Failed to read JSON file: "+exception.getMessage()); + } Value parsedJson = gson.fromJson(json, Value.class); if (parsedJson == null) retVal = Value.NULL;