Heim >Backend-Entwicklung >PHP-Problem >So verarbeiten Sie JSON-Daten in PHP
Json in PHP ist für einige erfahrene Entwickler normalerweise eine sehr häufige Sache. Bei der Verarbeitung von JSON-Daten in PHP müssen Sie häufig einige Vorgänge für Arrays verwenden, beispielsweise die Verarbeitung von Schlüssel-Wert-Paaren. Manchmal stoßen wir jedoch auf eine solche Situation: Wir verarbeiten eine Nicht-Array-Struktur von JSON-Daten. Wie geben wir also den Schlüssel an?
Schauen wir uns zunächst einige Grundlagen der Verarbeitung von JSON-Daten in PHP an.
Die Verarbeitung von JSON in PHP ist normalerweise in zwei Richtungen unterteilt: Konvertieren von PHP-Arrays in JSON-Strings und Konvertieren von JSON-Strings in PHP-Arrays.
Werfen wir zunächst einen Blick auf die Konvertierung von Array in JSON. In PHP gibt es eine sehr nützliche Funktion json_encode
, die ein PHP-Array in einen String im JSON-Format konvertieren kann. json_encode
可以把一个PHP数组转化为json格式的字符串。
例如,假设我们有如下数组:
$arr = array("name" => "Tom", "age" => 28, "gender" => "male");
如果我们想将这个数组转化为json,可以这样写:
$jsonStr = json_encode($arr); echo $jsonStr;
输出结果:
{"name":"Tom","age":28,"gender":"male"}
这里可以看到,原本的PHP数组已经成功地被转化为了一个json格式的字符串。同时,也可以看到,JSON数据是一种键值对的结构。
接下来,我们再看一下json转数组的情况。在PHP中,有一个非常好用的函数 json_decode
可以把一个json格式的字符串转化为PHP数组。
例如,假设我们有如下json数据(假设我们将上一个例子中生成的json字符串存到文件data.json
中):
{"name":"Tom","age":28,"gender":"male"}
如果我们想读取这个json数据并转化为PHP数组,可以这样写:
$jsonStr = file_get_contents("data.json"); $arr = json_decode($jsonStr, true); var_dump($arr);
输出结果:
array(3) { ["name"] => string(3) "Tom" ["age"] => int(28) ["gender"] => string(4) "male" }
可以看到,原来的json格式的字符串已经成功地转化为了PHP数组。
进一步说,如果我们只需要取出其中某一个值,通常我们会使用类似以下的方式,使用数组的key来取出对应的value:
echo $arr['name']; // 输出 Tom
但是,我们回到最开始提出的问题:假设我们读取到的json数据结构如下:
{ "status":1, "data":{ "name":"Tom", "age":28, "gender":"male" } }
这时,如果我们想取出其中的 name
值,会怎么做呢?
通常,我们会想到以下的代码:
$jsonStr = file_get_contents("data.json"); $arr = json_decode($jsonStr, true); echo $arr['data']['name'];
但是,这样的代码会出现一个Notice错误:
Notice: Undefined index: data in ...
这是因为PHP认为 $arr
是一个数组,但是我们却试图像处理JSON数据中的数组一样去访问 data
,这时它会被识别为一个字符串而不是数组。
为了解决这个问题,我们需要使用 $arr->data->name
的方式指定key:
$jsonStr = file_get_contents("data.json"); $obj = json_decode($jsonStr); echo $obj->data->name;
这样就可以正确输出:Tom
。这里,注意我们创建的对象是 stdClass
类型的,而不是数组类型,所以我们需要使用 $obj->data->name
rrreee
Wenn wir dieses Array in JSON konvertieren möchten, können wir so schreiben:🎜rrreee🎜Ausgabeergebnis:🎜rrreee🎜Wie Sie hier sehen können, das ursprüngliche PHP-Array wurde erfolgreich in eine Zeichenfolge im JSON-Format konvertiert. Gleichzeitig können Sie auch erkennen, dass es sich bei JSON-Daten um eine Schlüssel-Wert-Paarstruktur handelt. 🎜🎜Als nächstes werfen wir einen Blick auf die Konvertierung von JSON in Array. In PHP gibt es eine sehr nützliche Funktionjson_decode
, die eine Zeichenfolge im JSON-Format in ein PHP-Array konvertieren kann. 🎜🎜Angenommen, wir haben die folgenden JSON-Daten (vorausgesetzt, wir speichern die im vorherigen Beispiel generierte JSON-Zeichenfolge in der Datei data.json
): 🎜rrreee🎜Wenn wir diese JSON-Daten lesen möchten Und konvertieren Sie es in ein PHP-Array. Sie können es so schreiben: 🎜rrreee🎜Ausgabeergebnis: 🎜rrreee🎜Sie können sehen, dass die ursprüngliche JSON-Formatzeichenfolge erfolgreich in ein PHP-Array konvertiert wurde. 🎜🎜Wenn wir außerdem nur einen der Werte abrufen müssen, verwenden wir normalerweise eine Methode ähnlich der folgenden, um den entsprechenden Wert mithilfe des Schlüssels des Arrays abzurufen: 🎜rrreee🎜Kehren wir jedoch zur ursprünglichen Frage zurück: Angenommen Wir lesen die JSON-Datenstruktur wie folgt: 🎜rrreee🎜Was werden wir zu diesem Zeitpunkt tun, wenn wir den Wert name
herausnehmen möchten? 🎜🎜Normalerweise denken wir an den folgenden Code: 🎜rrreee🎜 Ein solcher Code führt jedoch zu einem Hinweisfehler: 🎜Hinweis: Undefinierter Index: Daten in ...🎜Das liegt daran, dass PHP denkt dass $arr ein Array ist, aber wenn wir versuchen, auf
Daten
wie auf ein Array in JSON-Daten zuzugreifen, wird es als String und nicht als Array erkannt. 🎜🎜Um dieses Problem zu lösen, müssen wir $arr->data->name
verwenden, um den Schlüssel anzugeben: 🎜rrreee🎜Auf diese Weise können wir Folgendes korrekt ausgeben: Tom
. Beachten Sie hier, dass das von uns erstellte Objekt vom Typ stdClass
und nicht vom Array-Typ ist. Daher müssen wir $obj->data->name
verwenden, um es anzugeben Schlüssel . 🎜🎜Zusammenfassend lässt sich sagen, dass wir bei der Verarbeitung von JSON-Daten mit Nicht-Array-Struktur Objekte anstelle von Arrays verwenden müssen. Gleichzeitig können wir diese Methode auch zum Durchlaufen nicht-arraystrukturierter JSON-Daten verwenden. 🎜Das obige ist der detaillierte Inhalt vonSo verarbeiten Sie JSON-Daten in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!