Vor PHP 5.4, als JSON_DECODE auf eine sehr große Ganzzahl stieß, konvertierte sie sie in einen schwebenden Typ, was zu Datenverlust führen könnte. Zum Beispiel, wenn es eine große Zahl in JSON gibt:
<span><span><span class="hljs-punctuation">{</span></span><span>
</span><span><span class="hljs-attr">"big_number"</span></span><span><span class="hljs-punctuation">:</span></span><span> </span><span><span class="hljs-number">12345678901234567890</span></span><span>
</span><span><span class="hljs-punctuation">}</span></span><span>
</span></span>
In PHP 5.3 oder früher kann diese Zahl zu einem schwimmenden Typ werden, wenn er JSON_DECODE aufruft, und die Genauigkeit geht verloren. PHP 5.4 führt die Konstante json_bigint_as_string vor. Wenn Sie diese Konstante angeben, verarbeitet JSON_DECODE große Ganzzahlen als Zeichenfolgen, anstatt sie in schwimmende Typen umzuwandeln. Dies vermeidet das Problem des Genauigkeitsverlusts.
Zum Beispiel:
<span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"big_number": 12345678901234567890}'</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>, </span><span><span class="hljs-number">512</span></span><span>, JSON_BIGINT_AS_STRING);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-string">'big_number'</span></span><span>]; </span><span><span class="hljs-comment">// Ausgabe "12345678901234567890"</span></span><span>
</span></span>
Diese Methode eignet sich besonders für Anwendungen, die sich mit Finanzen, wissenschaftlichem Computer und anderen Bereichen befassen müssen, und kann sicherstellen, dass die Genauigkeit der numerischen Werte nicht beeinflusst wird.
Obwohl die Konstante json_pretty_print bereits als PHP 5.3 existiert hat, hat sich sein Verhalten auf der Funktion JSON_DECODE geändert. In PHP 5.4 wirkt sich JSON_pretty_Print hauptsächlich auf das Ausgabedformat der Funktion JSON_Encode aus und beeinflusst nicht mehr JSON_DECODE . Es ist jedoch immer noch wichtig, die Rolle dieser Konstante zu verstehen, da es Entwicklern hilft, die Struktur von JSON -Daten beim Debuggen leichter zu lesen und zu verstehen.
Beispielsweise wird JSON_Encode in Verbindung mit json_pretty_print konstant verwendet:
<span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-keyword">array</span></span><span>(</span><span><span class="hljs-string">'foo'</span></span><span> => </span><span><span class="hljs-string">'bar'</span></span><span>, </span><span><span class="hljs-string">'baz'</span></span><span> => </span><span><span class="hljs-string">'qux'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">json_encode</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, JSON_PRETTY_PRINT);
</span></span>
Ausgangsergebnis:
<span><span><span class="hljs-punctuation">{</span></span><span>
</span><span><span class="hljs-attr">"foo"</span></span><span><span class="hljs-punctuation">:</span></span><span> </span><span><span class="hljs-string">"bar"</span></span><span><span class="hljs-punctuation">,</span></span><span>
</span><span><span class="hljs-attr">"baz"</span></span><span><span class="hljs-punctuation">:</span></span><span> </span><span><span class="hljs-string">"qux"</span></span><span>
</span><span><span class="hljs-punctuation">}</span></span><span>
</span></span>
Während JSON_DECODE selbst JSON -Zeichenfolgen nicht formatiert, können Entwickler sie bei JSON_Encode verwenden, um sicherzustellen, dass die Ausgabe freundlicher und lesbarer ist.
PHP 5.4 verbessert auch die rekursive Parsing -Fähigkeit von JSON_Decode . Wenn die JSON -Zeichenfolge nun verschachtelte Arrays oder Objekte enthält, wird JSON_Decode diese rekursiven Strukturen intelligenter behandelt, um sicherzustellen, dass komplexere JSON -Daten korrekt analysiert werden können. Zum Beispiel:
<span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"person": {"name": "John", "age": 30}, "address": {"city": "New York", "zip": "10001"}}'</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
</span></span>
Ausgabe:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[person] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[name] => John
[age] => </span><span><span class="hljs-number">30</span></span><span>
)
[address] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[city] => New York
[zip] => </span><span><span class="hljs-number">10001</span></span><span>
)
)
</span></span>
Diese Verbesserung ermöglicht es Entwicklern, sich Sorgen um die Komplexität verschachtelter Strukturen zu vermeiden, und JSON-Daten können direkt in mehrdimensionale Arrays oder Objekte umgewandelt werden.
Die Funktion JSON_DECODE in PHP 5.4 verbessert die Unterstützung für die UTF-8-Codierung bei der Verarbeitung von JSON-Zeichenfolgen mit Nicht-ASCII-Zeichen. Obwohl JSON_DECODE auch die UTF-8-Codierung in PHP 5.3 und früher unterstützt, hat PHP 5.4 strengere Überprüfung vorgenommen, um sicherzustellen, dass die Eingabedaten eine gültige UTF-8-Codierung sind, ansonsten wird Null zurückgegeben.
Zum Beispiel:
<span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"name": "José"}'</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>]; </span><span><span class="hljs-comment">// Ausgabe "José"</span></span><span>
</span></span>
Diese Verbesserung stellt sicher, dass Entwickler bei der Verarbeitung von JSON -Daten mit Sonderzeichen keine unerwarteten Parsing -Fehler oder Codierungsprobleme aufweisen.
PHP 5.4 hat einige Optimierungen bei der Fehlerbehandlung von JSON_Decode -Funktionen vorgenommen. Wenn JSON_DECODE Parsing fehlschlägt, wird Null zurückgegeben. Um detailliertere Fehlerinformationen zu erhalten, können Sie die Funktion json_last_error () verwenden. Vor PHP 5.4 war die Fehlermeldung relativ einfach und es kann für Entwickler schwierig sein, die spezifische Ursache des Fehlers zu bestimmen. Jetzt liefert PHP 5.4 mehr Fehlercodes, mit denen Entwickler Probleme genauer lokalisieren können.
Zum Beispiel:
<span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"name": "John", "age":}'</span></span><span>; </span><span><span class="hljs-comment">// Falsch JSON Format</span></span><span>
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> === </span><span><span class="hljs-literal">null</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'JSON Decodierungsfehler: '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">json_last_error_msg</span></span><span>(); </span><span><span class="hljs-comment">// Ausgabe详细的错误信息</span></span><span>
}
</span></span>
Auf diese Weise können Entwickler Formatprobleme von JSON -Daten problemlos identifizieren und beheben.