例如,如何在erlyDTL中使用huge json?

Example, how to use huge json in erlyDTL?

我有json

{
    "_total": 824,
    "_links": "self",
    "top": [
        {
            "viewers": 80896,
            "channels": 1177,
            "game": {
                "name": "League of Legends",
                "_id": 21779,
            }
        },
        {
            "viewers": 31211,
            "channels": 232,
            "game": {
                "name": "Dota 2",
                "_id": 29595,
            }
        }
    ]
}

如何最好地显示"top"列表?我试试:

Tuple = jsx:decode(unicode:characters_to_binary(Json)),
[_, _, Top] = Tuple,
Games = element(2, Top);

但是如何在模板中使用它?

{% for v in games %}
    {{ v.viewers }}<br><br>
    {{ v.channel }}<br><br>
    {{ v.game.name }}<br><br>
{% endfor %}

不行,然后显示{{ games.game.name }} ?

你做的代码很好,它只需要一些更新,你不应该将游戏传递给模板,而应该使用 top 作为键,例如,构建一个钢筋文件,如:

%rebar.config
{deps, [
    {erlydtl, ".*", {git, "git@github.com:erlydtl/erlydtl.git", "HEAD"}},
    {jsx, ".*", {git, "git@github.com:talentdeficit/jsx.git", "HEAD"}}
]}.

然后 运行:

rebar get-deps
rebar compile

现在用建议的更新定义一个模板,命名为 template.dtl:

{% for v in top %}
    {{ v.viewers }}<br><br>
    {{ v.channels }}<br><br>
    {{ v.game.name }}<br><br>
{% endfor %}

开始一个 erlang shell:

erl -pa ./deps/erlydtl/ebin/ -pa ./deps/merl/ebin/ -pa ./deps/jsx/ebin/

并执行应按预期显示模板的命令

Json = "{
    \"_total\": 824,
    \"_links\": \"self\",
    \"top\": [
        {
            \"viewers\": 80896,
            \"channels\": 1177,
            \"game\": {
                \"name\": \"League of Legends\",
                \"_id\": 21779,
            }
        },
        {
            \"viewers\": 31211,
            \"channels\": 232,
            \"game\": {
                \"name\": \"Dota 2\",
                \"_id\": 29595,
            }
        }
    ]
}".
Tuple = jsx:decode(unicode:characters_to_binary(Json)).
erlydtl:compile("./template.dtl", test).
test:render(Tuple).

给出预期输出

{ok,[[[<<"\n    ">>,"80896",<<"<br><br>\n    ">>,"1177",
   <<"<br><br>\n\t">>,<<"League of Legends">>,<<"<br><br>\n">>],
  [<<"\n    ">>,"31211",<<"<br><br>\n    ">>,"232",
   <<"<br><br>\n\t">>,<<"Dota 2">>,<<"<br><br>\n">>]],
 <<"\n">>]}

简而言之,在您的模板中,将 games 替换为 top 并将 Tuple 传递给模板