如何为 J2H 定义递归转换?

How to define recursive transforms for J2H?

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

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

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

示例:

+ 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_primitive 和基元,它们可以位于树的不同级别。并且相同类型的节点将具有相同的结构。

您应该能够使用内联函数和嵌套转换来执行类似的操作(http://json2html.com/examples/#example-basic-nested)

例如,如果您想要基于类型 json 的特定 child 字段,您可以这样做

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)