Wie bereits in meinem Kommentar erwähnt, was Sie dort haben, ist eine ganze HTTP-Antwort. Es enthält die JSON-Daten im Hauptteil, also müssen Sie das analysieren. Hier ist eine Möglichkeit, darüber zu gehen:
preg_match("/\{(.*)\}/s", $rawResponse, $matches);
Das paßt alles zwischen den Tannen „{“ und die letzten „}“, das ist, wo das JSON-Daten Leben und speichert jedes Spiel in $matches
. Da es nur ein Spiel geben sollte, interessiert uns $matches[0]
.
Jetzt müssen Sie nur, sie entschlüsseln zurück:
$data = json_decode($matches[0]);
// or
// $data = json_decode($matches[0], true)
// if you want an associative array instead of an object.
Caveat: Dies wird mit Ihrem Beispiel nicht funktionieren, weil es nicht gültig JSON ist. Das Komma nach "online_status": 1,
macht es ungültig, so json_decode
wird false
zurückgeben. Aber ich denke, Sie haben nur einige Zeilen in Ihrer Frage entfernt, um die Lesbarkeit zu verbessern.
Wenn Sie die Kontrolle darüber haben, wie die Daten gespeichert werden, sollten Sie unbedingt nur die JSON-Daten speichern, damit Sie sich nicht mit solchen Problemen befassen müssen. Wenn Sie immer noch die gesamte rohe Antwort benötigen, speichern Sie sie möglicherweise in einer anderen Tabelle/Spalte. Dies macht die Dinge viel einfacher, vor allem mit Laravel. Zum Beispiel, wenn die Daten so etwas wie ein details
Feld auf einem Transaction
Modell oder etwas sind, könnten Sie etwas dabei wie folgt tun:
class Transaction extends Model {
protected $casts = [
'details' => 'json'
];
}
Wenn nun $transaction->details
Zugriff erhalten Sie automatisch ein Array erhalten. Und das funktioniert sogar in beide Richtungen: $transaction->details = ['new' => 'data']
wird es vor dem Speichern in JSON konvertieren. Sie müssten also nicht mit dem Hin und Her konvertieren.
Geben Sie den Code ein, der diese Daten zurückgibt –
Wo benötigen Sie sie? Am Frontend oder Backend? – Benyi
Weil das kein gültiger JSON ist. Wenn das das einzige Format ist, das du bekommen kannst, musst du es zuerst putzen und dann dekodieren. –