首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sesam DTL -创建复杂的json输出是痛苦的

Sesam DTL -创建复杂的json输出是痛苦的
EN

Stack Overflow用户
提问于 2018-09-11 12:41:07
回答 1查看 92关注 0票数 0

目前,越来越多的管道用json发送数据。但是创建一个复杂的json是痛苦的,因为我们必须使用大量嵌套的"dict“和"list”。很难读取这样的dtl并将输出图像化。是否有更好的方法通过dtl创建json?

在我看来,最好的解决方案可能是“使用一些模板”,并将jinja2等变量替换为xml和html,例如:

  • “添加”、"output_template“、"{'id':$V(_id)、'name':$V(命名空间:名称)、'address':{'street':$V(命名空间:street)、'zipcode':$V(命名空间:zipcode)}}”。
  • "json_render",_T.output_template,_S。

所有$V变量都将被"_S“或"_T”中的键替换。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-11 19:37:38

您可以使用这样的DTL构建自己的模板引擎:

代码语言:javascript
复制
{
  "_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."]
        ]
      ]
    }
  }
}

这将给出以下输出:

代码语言:javascript
复制
[
  {
    "_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)"
    }
  }
]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52276207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档