PHP und JSON: Unterschied zwischen den Versionen
Aus Wikizone
| Zeile 7: | Zeile 7: | ||
?> | ?> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | <syntaxhighlight lang="php"> | ||
| + | <?php | ||
| + | $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; | ||
| + | |||
| + | var_dump(json_decode($json)); | ||
| + | var_dump(json_decode($json, true)); | ||
| + | |||
| + | ?> | ||
| + | </syntaxhighlight> | ||
| + | Das oben gezeigte Beispiel erzeugt folgende Ausgabe: | ||
| + | <pre> | ||
| + | object(stdClass)#1 (5) { | ||
| + | ["a"] => int(1) | ||
| + | ["b"] => int(2) | ||
| + | ["c"] => int(3) | ||
| + | ["d"] => int(4) | ||
| + | ["e"] => int(5) | ||
| + | } | ||
| + | |||
| + | array(5) { | ||
| + | ["a"] => int(1) | ||
| + | ["b"] => int(2) | ||
| + | ["c"] => int(3) | ||
| + | ["d"] => int(4) | ||
| + | ["e"] => int(5) | ||
| + | } | ||
| + | </pre> | ||
| + | |||
== Daten aus mySQL in eine JSON Datei schreiben == | == Daten aus mySQL in eine JSON Datei schreiben == | ||
<pre> | <pre> | ||
Version vom 11. August 2015, 13:48 Uhr
PHP Array in JSON String
http://php.net/manual/de/function.json-encode.php
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
Daten aus mySQL in eine JSON Datei schreiben
<?php
$sql=mysql_query("select * from Posts limit 20");
$response = array();
$posts = array();
$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
$title=$row['title'];
$url=$row['url'];
$posts[] = array('title'=> $title, 'url'=> $url);
}
$response['posts'] = $posts;
$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($response));
fclose($fp);
?>
Korrekte Header für JSON-Daten
Wenn man Header Infos mit zurückgibt kann das z.B. so aussehen
$arrJSON = array('text'=>'Hallo Welt');
// Wir geben der Anfrage ein JSON Objekt-Literal zurück
$ajax_return_data = json_encode($arrJSON);
header('Expires: Mon, 26 Jul 2000 03:00:00 GMT');
header('Last-Modified: ' . gmdate( "D, d M Y H:i:s" ) . 'GMT');
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');
header('Content-Length: '.strlen($ajax_return_data));
header('Content-Type: application/json; charset=UTF-8');
echo $ajax_return_data;
exit;
Der Content-Type: application/json ist nach Internet Recherche korrekt. Jedoch gibt es auch Aussagen über mögliche oder für manche Anwendungen sogar notwendige anders lautende Angaben:
Für JSONP (für Zugriff auf Server anderer Domains)
Content-Type: application/javascript
Funktionieren soll angeblich auch:
application/x-javascript text/x-javascript text/x-json
Wichtig ist die Angabe des charset. Firebug moniert sofort, daß es nicht weiß um was es sich handelt. Und es kann später Probleme mit Sonderzeichen geben.
XML und JSON Konvertierung
$xml = simplexml_load_string($xmlstring); $json = json_encode($xml); $arr = json_decode($json,true);