如何在Smarty中打印json

时间:2014-07-23 11:22:21

标签: 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
    }
]

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

{foreach from=$games item=foo}
     <li>{$foo.first_name}</li>
{/foreach}

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

3 个答案:

答案 0 :(得分:3)

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

第一个解决方案

在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);

在Smarty中你使用:

{foreach from=$games|json_decode item=foo}
     <li>{$foo->first_name}</li>
{/foreach}

但是,在这种情况下,我不确定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));

在Smarty文件中:

{foreach from=$games item=foo}
     <li>{$foo->first_name}</li>
{/foreach}

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

答案 1 :(得分:2)

尝试以下方法:

{foreach from=$games item=foo}
     {assign var=bar value=$foo|json_decode:1}
     <li>{$bar.first_name}</li>
{/foreach}

答案 2 :(得分:1)

首先,您需要将其转换为数组,然后您可以更轻松地循环并打印它

假设您在名为$ response

的变量中获取了json
// Convert to array
{$response|json_decode}

您现在将获得一个数组,您可以使用{foreach}

遍历数组

转换为数组之后,您将更容易循环作为数组的foreach工作而不是json输出