I have a data structure in freemarker which I would like to render as JSON notation in the output, similar to Javascript's JSON.stringify
, is there something in freemarker such as object?json
or any other simple way?
We wrote a simple pseudo DataLoader for FreeMarker that returns an "JSON" object that provides the methodes stringify() and parse():
package de.teambits.server.fmpp;
import flexjson.JSONDeserializer;
import flexjson.JSONSerializer;
import fmpp.Engine;
import fmpp.tdd.DataLoader;
import java.util.List;
/**
* Returns a JSON object that offers parse() and stringify() methods for use in fmpp
*/
public class JSONFactory implements DataLoader {
@Override
public Object load(Engine e, List args) throws Exception {
return new JSON();
}
public static class JSON {
public String stringify(Object object) {
return new JSONSerializer().deepSerialize(object);
}
public Object parse(String jsonString) {
return new JSONDeserializer().deserialize(jsonString);
}
}
}
So, if you add to your Freemarker / fmpp config this JSON object:
data: {
JSON: de.teambits.server.fmpp.JSONFactory()
}
You can simple call ${ JSON.stringify(object) }
or ${ JSON.parse("json-string") }