freemarker-to-json2.js
This module take a yaml file or a json file and convert it to a freemarker file that output the data as valid json format.
Example:
Convert this
name: paulid: 1favorite: - type: food value: ramen - type: drink value: milk-tea
or
to
{ "name": ${get(name)}, "id": ${get(id)}, "favorite": <@arrayFrame favorite; item>{ "type": ${get(item, 'type')}, "value": ${get(item, 'value')} }</@arrayFrame>}
which the get
, arrayFrame
is just a convenient way to transform ftl data to valid json.
<#-- A simple helper to convert ftl data to valid json value --><#function value input=""> <#if input?is_number> <#return input?c> <#elseif input?is_boolean> <#return input?string> <#elseif input?is_string> <#return '"' + input?js_string + '"'> <#elseif input?is_date> <#return '"' + input?string["yyyy/MM/dd HH:mm:ss"] + '"'> </#if></#function> <#-- A lodash.get alike helper --><#function get object="" path="" default='""'> <#if object?is_hash && path != ""> <#local childs = path?split(".")> <#list childs as child> <#if object[child]??> <#local object = object[child]> <#else> <#return default> </#if> </#list> </#if> <#return value(object)></#function> <#-- A simple helper to wrap freemarker `#list` with json array --><#macro arrayFrame items=[]> <#compress> [ <#list items as item> <#nested item><#if item_has_next>,</#if> </#list> ] </#compress></#macro>
Usage
const transform = // same as output.ftl
Test
npm test