例如,如何在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
传递给模板
我有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
传递给模板