如何在yii2中将数组转换为json

时间:2015-03-08 08:51:00

标签: rest yii2

我正在创建restful apis,我有一个函数来发送yii1这样的响应数据

public function sendResponse($data)
{
    header('Content-Type: application/json; charset=utf-8');
    echo CJSON::encode($data);
    exit;
}
CJSON无法使用

Yii2,因此如何在Yii2

中执行此操作

3 个答案:

答案 0 :(得分:25)

无需像这样手动设置标题。

在特定的操作/方法中,您可以这样设置:

use Yii;
use yii\web\Response;

...

public function actionIndex()
{
    Yii::$app->response->format = Response::FORMAT_JSON;
}

然后在那之后返回一个简单的数组:

return ['param' => $value];

您可以在官方文档here中找到此属性。

对于使用特殊ContentNegotiator过滤器的多个操作,更灵活的方法是:

/**
 * @inheritdoc
 */
public function behaviors()
{
    return [
        [
            'class' => ContentNegotiator::className(),
            'only' => ['index', 'view']
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
            ],
        ],
    ];
}

还有更多设置,您可以在official docs中查看。

至于REST,基础yii\rest\Controller已经为jsonxml设置了基础:

'contentNegotiator' => [
    'class' => ContentNegotiator::className(),
    'formats' => [
        'application/json' => Response::FORMAT_JSON,
        'application/xml' => Response::FORMAT_XML,
    ],
],

答案 1 :(得分:2)

您可以在yii2中使用Json类

yii\helpers\Json;

它包含以下方法:

Json::encode();
Json::decode();

这些方法直接将yii2 activerecord对象转换为json数组。

答案 2 :(得分:1)

::查找() - > asArray() - >所有(); 希望得到帮助。