如何在Smarty中打印json

Dib*_*ish 5 php arrays smarty

我从api得到一个json,如何使用Smarty打印json.

Json格式

[
    {
        "first_name": "jinu",
        "last_name": "mk",
        "loginid": "jinu@amt.in",
        "timezone": "5.5",
        "team_id": "c964ef415f157ddd99173f5b481ee1e3",
        "user_type": 1,
        "last_login_date": null
    },
    {
        "first_name": "avatar second",
        "last_name": "test",
        "loginid": "avatar2@gmail.com",
        "timezone": "5.5",
        "team_id": "ec40f5feda8643135bc20be44f897b03",
        "user_type": "3",
        "last_login_date": null
    },
    {
        "first_name": "avatar testing admin",
        "last_name": "amt 1",
        "loginid": "avatar@amt.in",
        "timezone": "5.5",
        "team_id": "ec40f5feda8643135bc20be44f897b03",
        "user_type": 1,
        "last_login_date": null
    }
]
Run Code Online (Sandbox Code Playgroud)

我已经厌倦了以下的foreach但它没有打印任何东西.

{foreach from=$games item=foo}
     <li>{$foo.first_name}</li>
{/foreach}
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题.谢谢

Mar*_*łek 3

您有 2 种可能的解决方案。

第一个解决方案

在 PHP 中你使用:

$data = '[
    {
        "first_name": "jinu",
        "last_name": "mk",
        "loginid": "jinu@amt.in",
        "timezone": "5.5",
        "team_id": "c964ef415f157ddd99173f5b481ee1e3",
        "user_type": 1,
        "last_login_date": null
    },
    {
        "first_name": "avatar second",
        "last_name": "test",
        "loginid": "avatar2@gmail.com",
        "timezone": "5.5",
        "team_id": "ec40f5feda8643135bc20be44f897b03",
        "user_type": "3",
        "last_login_date": null
    },
    {
        "first_name": "avatar testing admin",
        "last_name": "amt 1",
        "loginid": "avatar@amt.in",
        "timezone": "5.5",
        "team_id": "ec40f5feda8643135bc20be44f897b03",
        "user_type": 1,
        "last_login_date": null
    }
]';


$smarty->assign('games',$data);
Run Code Online (Sandbox Code Playgroud)

在 Smarty 中,您使用:

{foreach from=$games|json_decode item=foo}
     <li>{$foo->first_name}</li>
{/foreach}
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,我不确定是否仅json_decode运行$games一次或每次调用时运行。

第二种解决方案

在 PHP 中,您使用:

$data = '[
    {
        "first_name": "jinu",
        "last_name": "mk",
        "loginid": "jinu@amt.in",
        "timezone": "5.5",
        "team_id": "c964ef415f157ddd99173f5b481ee1e3",
        "user_type": 1,
        "last_login_date": null
    },
    {
        "first_name": "avatar second",
        "last_name": "test",
        "loginid": "avatar2@gmail.com",
        "timezone": "5.5",
        "team_id": "ec40f5feda8643135bc20be44f897b03",
        "user_type": "3",
        "last_login_date": null
    },
    {
        "first_name": "avatar testing admin",
        "last_name": "amt 1",
        "loginid": "avatar@amt.in",
        "timezone": "5.5",
        "team_id": "ec40f5feda8643135bc20be44f897b03",
        "user_type": 1,
        "last_login_date": null
    }
]';



$smarty->assign('games',json_decode($data));
Run Code Online (Sandbox Code Playgroud)

在 Smarty 文件中:

{foreach from=$games item=foo}
     <li>{$foo->first_name}</li>
{/foreach}
Run Code Online (Sandbox Code Playgroud)

我总是建议使用第二种方法,因为如果可能的话,在 Smarty 中您应该避免使用任何计算而只显示数据。