In diesem Artikel erfahren Sie, wie Sie JSON in PHP bedienen und welche häufigen Fehler in json_decode() auftreten. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
1. json_encode()
Diese Funktion wird hauptsächlich zum Konvertieren von Arrays und Objekten in das JSON-Format verwendet. [Verwandte Empfehlungen: PHP-Tutorial]
Sehen Sie sich zunächst ein Beispiel für die Array-Konvertierung an:
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_encode($arr); // 结果为 {"a":1,"b":2,"c":3,"d":4,"e":5}
Schauen Sie sich dann ein Beispiel für die Objektkonvertierung an:
$obj->body = 'another post'; $obj->id = 21; $obj->approved = true; $obj->favorite_count = 1; $obj->status = NULL; echo json_encode($obj); // 结果为 { "body":"another post", "id":21, "approved":true, "favorite_count":1, "status":null }
Da JSON nur UTF-8-codierte Zeichen akzeptiert, müssen die Parameter von json_encode() UTF-8-codiert sein, sonst erhalten Sie leere Zeichen oder Null. Wenn Chinesisch die GB2312-Kodierung verwendet oder Fremdsprachen die ISO-8859-1-Kodierung verwenden, sollte diesem Punkt besondere Aufmerksamkeit gewidmet werden.
2. Indizierte Arrays und assoziative Arrays
PHP unterstützt zwei Arten von Arrays, eines ist ein indiziertes Array, das nur „Wert“-Arrays (Werte) speichert ), das andere ist ein assoziatives Array, das Name/Wert-Paare speichert.
Da Javascript keine assoziativen Arrays unterstützt, konvertiert json_encode() nur das indizierte Array in das Array-Format und das assoziative Array in das Objektformat.
Zum Beispiel gibt es jetzt ein Index-Array
$arr = Array('one', 'two', 'three'); echo json_encode($arr);
und das Ergebnis ist:
["one","two","three"]
Wenn Sie es in ein assoziatives Array ändern:
$arr = Array('1'=>'one', '2'=>'two', '3'=>'three'); echo json_encode($arr);
das Ergebnis ändert sich:
{"1":"one","2":"two","3":"three"}
Beachten Sie, dass sich das Datenformat von „[]“ (Array) zu „{}“ (Objekt) geändert hat.
Wenn Sie die Konvertierung von „Index-Array“ in „Objekt“ erzwingen müssen, können Sie so schreiben:
json_encode( (object)$arr );
oder
json_encode ( $arr, JSON_FORCE_OBJECT );
3. Klassenkonvertierung
Das Folgende ist eine PHP-Klasse:
class Foo { const ERROR_CODE = '404'; public $public_ex = 'this is public'; private $private_ex = 'this is private!'; protected $protected_ex = 'this should be protected'; public function getErrorCode() { return self::ERROR_CODE; } }
Führen Sie nun eine JSON-Konvertierung für die Instanz dieser Klasse durch:
$foo = new Foo; $foo_json = json_encode($foo); echo $foo_json;
Das Ausgabeergebnis ist
{"public_ex":"this is public"}
Sie können sehen, dass außer öffentlichen Variablen (public) andere Dinge (Konstanten, private Variablen, Methoden usw.) fehlen.
4. json_decode()
Diese Funktion wird verwendet, um JSON-Text in die entsprechende PHP-Datenstruktur zu konvertieren. Hier ist ein Beispiel:
$json = '{"foo": 12345}'; $obj = json_decode($json); print $obj->{'foo'}; // 12345
Normalerweise gibt json_decode() immer ein PHP-Objekt zurück, kein Array. Zum Beispiel:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json));
Das Ergebnis ist die Generierung eines PHP-Objekts:
object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
Wenn Sie die Generierung eines assoziativen PHP-Arrays erzwingen möchten, muss json_decode() einen Parameter true:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json,true));
array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
5. Häufige Fehler von json_decode()
Die folgenden drei Arten, JSON zu schreiben, sind Alles falsch. Kannst du erkennen, wo der Fehler liegt?$bad_json = "{ 'bar': 'baz' }"; $bad_json = '{ bar: "baz" }'; $bad_json = '{ "bar": "baz", }';
var_dump(json_decode("Hello World")); //null
Das obige ist der detaillierte Inhalt vonWie betreibt PHP JSON? Methodeneinführung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!