如何在Smarty中打印json


How to print a json in 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 from=$games item=foo}
     <li>{$foo.first_name}</li>
{/foreach}

请帮我解决这个问题。由于

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

在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中你应该避免使用任何计算,而只是显示数据。

尝试如下:

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

首先你需要将其转换为数组这样你就可以更容易地循环并打印它

假设你在一个名为$response

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

你现在将得到一个数组,你可以使用{foreach}遍历数组

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