目前,越来越多的管道用json发送数据。但是创建一个复杂的json是痛苦的,因为我们必须使用大量嵌套的"dict“和"list”。很难读取这样的dtl并将输出图像化。是否有更好的方法通过dtl创建json?
在我看来,最好的解决方案可能是“使用一些模板”,并将jinja2等变量替换为xml和html,例如:
所有$V变量都将被"_S“或"_T”中的键替换。
发布于 2018-09-11 19:37:38
您可以使用这样的DTL构建自己的模板引擎:
{
"_id": "template",
"type": "pipe",
"source": {
"type": "embedded",
"entities": {
"_id": "foo",
"namespace:name": "Baard",
"namespace:street": "Rødhettes vei 5",
"namespace:zipcode": "1482"
}
},
"transform": {
"type": "dtl",
"rules": {
"default": [
["add", "output_template", {
"name": "$V(namespace:name)",
"address": {
"street": "$V(namespace:street)",
"zipcode": "$V(namespace:zipcode)"
},
"id": "$V(_id)"
}],
["add", "output",
["apply", "template-engine", "_T.output_template"]
]
],
"template-engine": [
["merge",
["map-dict", "_.",
["if",
["matches", "$V(*)", "_."],
["path",
["lstrip", "$V(",
["rstrip", ")", "_."]
], "_R._S"],
["if",
["is-dict", "_."],
["apply", "template-engine", "_."]
]
], "_S."]
]
]
}
}
}这将给出以下输出:
[
{
"_id": "foo",
"output": {
"address": {
"street": "Rødhettes vei 5",
"zipcode": "1482"
},
"id": "foo",
"name": "Baard"
},
"output_template": {
"address": {
"street": "$V(namespace:street)",
"zipcode": "$V(namespace:zipcode)"
},
"id": "$V(_id)",
"name": "$V(namespace:name)"
}
}
]https://stackoverflow.com/questions/52276207
复制相似问题