diff --git a/Helpers.md b/Helpers.md index cbc20ef..0c107e4 100644 --- a/Helpers.md +++ b/Helpers.md @@ -219,4 +219,10 @@ Truthiness of arguments is determined by [Handlebars.Utils.isEmpty(Object)](http ```handlebars {{#if (not (if a '===' b)) }} a does not equal b {{/if}} {{#not (if a '===' b) }} a does not equal b {{/not}} +``` + +### [JsonParser](light-development/src/main/java/com/merkle/oss/magnolia/renderer/handlebars/helpers/JsonParseHelper.java) +Can be used to pass parsed json to other helpers. Arrays,objects and primitives are supported. +```handlebars +{{pattern name='somePattern' someJsonObjectProperty=(parse-json '{"key": "value"}')}} ``` \ No newline at end of file diff --git a/light-development/pom.xml b/light-development/pom.xml index d4f5e06..b60d8e0 100644 --- a/light-development/pom.xml +++ b/light-development/pom.xml @@ -37,6 +37,10 @@ com.google.auto.factory auto-factory + + com.google.code.gson + gson + diff --git a/light-development/src/main/java/com/merkle/oss/magnolia/renderer/handlebars/helpers/JsonParseHelper.java b/light-development/src/main/java/com/merkle/oss/magnolia/renderer/handlebars/helpers/JsonParseHelper.java new file mode 100644 index 0000000..8689c2c --- /dev/null +++ b/light-development/src/main/java/com/merkle/oss/magnolia/renderer/handlebars/helpers/JsonParseHelper.java @@ -0,0 +1,35 @@ +package com.merkle.oss.magnolia.renderer.handlebars.helpers; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.github.jknack.handlebars.Options; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + +public class JsonParseHelper implements NamedHelper { + private final Gson gson = new GsonBuilder().create(); + + public Object apply(final String json, final Options options) throws IOException { + final JsonElement jsonElement = JsonParser.parseString(json); + if(jsonElement.isJsonArray()) { + return gson.fromJson(jsonElement.getAsJsonArray(), List.class); + } + if(jsonElement.isJsonObject()) { + return gson.fromJson(jsonElement.getAsJsonObject(), Map.class); + } + if(jsonElement.isJsonPrimitive()) { + return json; + } + return null; + } + + @Override + public Set names() { + return Set.of("parse-json"); + } +}