如何为J2H定义递归变换?

时间:2018-03-20 21:15:18

标签: json json2html

我正在评估使用J2H(http://json2html.com/examples/)来渲染JSON结构。

我的JSON是复杂的树,有许多重复(递归)结构。

我的问题是如何定义可以在JSON树的多个级别应用的转换,当它找到相同类型/结构的节点时(我可以添加类型或类属性以了解哪些节点属于同一类型) )。

示例:

+ root type=node
  + child type=attribute
    + child type=node
      + child type=attribute
  + child type=attribute
    + child type=node_primitive
      + child type=primitive
  + child type=attribute
    + child type=node

在该树上,我们有类型:node,attribute,node_primitive和primitive,它们可以位于树的不同级别。并且相同类型的节点将具有相同的结构。

1 个答案:

答案 0 :(得分:1)

您应该能够使用内联函数和嵌套转换(http://json2html.com/examples/#example-basic-nested

例如,如果您希望基于json类型的字段生一个特定的孩子,则可以执行以下操作

var transforms = {
    'attribute':{'<>':'div','text':'Attribute'},
    'node':{'<>':'div','text':'Node'},
    'list':{'<>':'li','html':function(){
        return( json2html.transform(this,transforms[this.type]) );    
    }},

var data = [
    {'type':'node'},
    {'type':'attribute'}
];

document.write( json2html.transform(data,transforms.list) );

如果您的JSON结构具有多个深度级别,则可以在根节点的内联函数中递归调用以下内容。

json2html.transform(this.child,transforms.list)