Antwort im JSON-Format in Yii2 erhalten

Lesezeit: 3 Minuten

Benutzeravatar von ASN
ASN

Ich versuche, ein Array der Antwort in das JSON-Format zu konvertieren. Ich habe alle Antworten ausprobiert, die auf SO und anderen Websites wie veröffentlicht wurden web1,web2 Hinzufügen header('Content-Type: application/json') und dann echo json_encode($data,JSON_PRETTY_PRINT);
Aber ich bekomme immer die Ausgabe im Textformat. Kann mir jemand bei der Lösung helfen.

Helferklasse:

public static function renderJSON($data) {
    header('Content-Type: application/json');
    echo json_encode($data,JSON_PRETTY_PRINT);
}

Mein Controller:

if ($model->login()) {
    $user =  User::findByUsernameOrEmail($request->post('username'));
    $userArray = ArrayHelper::toArray($user);
    Helpers::renderJSON($userArray);

Ich habe versucht, die zu drucken userArray und es sieht so aus:

Array
(
    [name] => abc
    [lastname] => xyz
    [username] => test_test
)

Json-Ausgabe: (html/text)

{
    "name": "abc",
    "lastname": "xyz",
    "username": "test_test"
}

Satz

\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

in der Aktion des Controllers irgendwo zuvor return.

  • Danke Bizley. Es funktioniert. Kann ich es in die hinzufügen helper class Vor dem echo -Anweisung, da ich diese Funktion an verschiedenen Stellen aufrufen werde.

    – Lieferavis

    16. Januar 2017 um 11:16 Uhr

  • Zuallererst sollten Sie return Daten und nicht echo es. Es kann überall sein, solange es die aktuelle Reaktion beeinflusst.

    – Bizley

    16. Januar 2017 um 11:18 Uhr

  • Ok Bizley. Ich werde es so ändern, dass es anstelle von echo zurückkehrt (aber wenn ich es auf return ändere, erhalte ich ein leeres Ergebnis. Ich überprüfe den Code auf postman und es gibt nichts in der Ausgabe). Und ich habe die Erklärung hinzugefügt behaviors() Methode im Controller

    – Lieferavis

    16. Januar 2017 um 11:22 Uhr


  • Beim Hinzufügen \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; Sie müssen keine Hilfsklassen verwenden, nicht einmal $userArray = ArrayHelper::toArray($user);versuchen Sie einfach zurückzukehren $user

    – marschieren

    16. Januar 2017 um 16:26 Uhr

  • @ASN siehe meine Antwort unten

    – Jasar Arafath

    8. August 2017 um 11:14 Uhr

Benutzeravatar von Andreas Hinderberger
Andreas Hinderberger

Seit Yii 2.0.11 gibt es eine dedizierte asJson() -Methode, um eine Antwort im JSON-Format zurückzugeben. Laufen:

return $this->asJson($array);

in Ihrer Controller-Aktion.

  • Wenn Sie einen großen Teil des HTML zurückgeben, funktioniert es sehr langsam, ich kann nicht verstehen, warum

    – Oleg

    4. März um 10:16

  • Versuchen Sie, das Debuggen vollständig zu deaktivieren, und sehen Sie, ob dies die Ladezeit verbessert. Ich habe mehrere Yii2-Projekte, die Probleme mit der Ladezeit hatten, und durch das schrittweise Deaktivieren von Modulen/Komponenten stellte ich fest, dass es die Yii2-Debug-Komponente war, die die gesamte Anwendungsserverseite verlangsamte.

    – Andreas Hinderberger

    4. März um 14:50 Uhr

Fügen Sie dies einfach im Controller hinzu

public function beforeAction($action)
{

    \Yii::$app->response->format = Response::FORMAT_JSON;
    return parent::beforeAction($action);
}

  • Danke, beste Lösung für Apps mit ein paar API-Controllern zusätzlich zur Basis-App

    – Urgotto

    6. August 2021 um 7:39 Uhr

use JsonException;
use yii\web\NotFoundHttpException;
use yii\base\InvalidConfigException;
use yii\web\Response;
use yii\web\JsonResponseFormatter;


/**
 * @param int $id
 * @return string[]
 * @throws InvalidConfigException
 * @throws JsonException
 * @throws NotFoundHttpException
 */
public function actionViewJson(): array
{
    Yii::$app->response->format = Response::FORMAT_JSON;
    Yii::$app->response->formatters = [
        Response::FORMAT_JSON => [
            'class' => JsonResponseFormatter::class,
            'prettyPrint' => true
        ]
    ];
    
    return ['key' => 'val'];
}       

use yii\helpers\Json;
use yii\web\Response;

Fügen Sie zuerst die beiden obigen Zeilen oben in Ihrem Controller ein, und fügen Sie dann in einer Ihrer Controller-Aktionen direkt vor den return-Anweisungen die folgenden ein

Yii::$app->response->format = Response::FORMAT_JSON;
return Json::encode([
            'message' => 'success'
]);

Sie können das Rückgabearray nach Belieben erstellen.

  • Das kam zurück "{\"message\":\"success\"}" als String kein Objekt!

    – Shareef

    16. Dezember 2020 um 6:47 Uhr

  • Sie können dies verwenden: json_encode($your_array,JSON_UNESCAPED_SLASHES)

    – PouriaDiesel

    16. Januar 2021 um 10:02 Uhr

  • Json::encode – ist redundant, FORMAT_JSON tat dasselbe

    – Urgotto

    6. August 2021 um 7:38 Uhr

  • Das kam zurück "{\"message\":\"success\"}" als String kein Objekt!

    – Shareef

    16. Dezember 2020 um 6:47 Uhr

  • Sie können dies verwenden: json_encode($your_array,JSON_UNESCAPED_SLASHES)

    – PouriaDiesel

    16. Januar 2021 um 10:02 Uhr

  • Json::encode – ist redundant, FORMAT_JSON tat dasselbe

    – Urgotto

    6. August 2021 um 7:38 Uhr

1430550cookie-checkAntwort im JSON-Format in Yii2 erhalten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy