PHP und JSON: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
 
(7 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
== Wichtige Funktionen ==
 +
=== json_encode json_decode ===
 +
$ajaxResponse['success'] = $success;
 +
$ajaxResponse['messages'][] = $success_message;
 +
$jsonString = json_encode($ajaxResponse);
 +
 +
$jsonObject = json_decode($jsonResponse);
 +
 +
== PHP Array in JSON String ==
 +
http://php.net/manual/de/function.json-encode.php
 +
<syntaxhighlight lang="php">
 +
<?php
 +
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
 +
echo json_encode($arr);
 +
?>
 +
</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>
 
<?php  
 
<?php  
 +
 
$sql=mysql_query("select * from Posts limit 20");  
 
$sql=mysql_query("select * from Posts limit 20");  
  
Zeile 21: Zeile 67:
 
fwrite($fp, json_encode($response));
 
fwrite($fp, json_encode($response));
 
fclose($fp);
 
fclose($fp);
</pre>
 
  
 
?>
 
?>
 +
</pre>
  
== Korrekte Header Informationen für JSON ==
+
== Korrekte Header für JSON-Daten ==
 
Wenn man Header Infos mit zurückgibt kann das z.B. so aussehen
 
Wenn man Header Infos mit zurückgibt kann das z.B. so aussehen
  
 
<pre>
 
<pre>
$arrJSON = array('text'=>'Hallo Welt');
+
 
// Wir geben der Anfrage ein JSON Objekt-Literal zurück
+
$arrJSON = array('text'=>'Hallo Welt');
$ajax_return_data = json_encode($arrJSON);
+
// Wir geben der Anfrage ein JSON Objekt-Literal zurück
header('Expires: Mon, 26 Jul 2000 03:00:00 GMT');
+
$ajax_return_data = json_encode($arrJSON);
header('Last-Modified: ' . gmdate( "D, d M Y H:i:s" ) . 'GMT');
+
header('Expires: Mon, 26 Jul 2000 03:00:00 GMT');
header('Cache-Control: no-cache, must-revalidate');
+
header('Last-Modified: ' . gmdate( "D, d M Y H:i:s" ) . 'GMT');
header('Pragma: no-cache');
+
header('Cache-Control: no-cache, must-revalidate');
header('Content-Length: '.strlen($ajax_return_data));
+
header('Pragma: no-cache');
header('Content-Type: application/json');
+
header('Content-Length: '.strlen($ajax_return_data));
echo $ajax_return_data;
+
header('Content-Type: application/json; charset=UTF-8');
exit;
+
echo $ajax_return_data;
 +
exit;
 +
 
 
</pre>
 
</pre>
  
Zeile 51: Zeile 99:
 
  text/x-javascript
 
  text/x-javascript
 
  text/x-json
 
  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 ==
 +
<pre>
 +
$xml = simplexml_load_string($xmlstring);
 +
$json = json_encode($xml);
 +
$arr = json_decode($json,true);
 +
</pre>

Aktuelle Version vom 19. Februar 2019, 10:32 Uhr

Wichtige Funktionen[Bearbeiten]

json_encode json_decode[Bearbeiten]

$ajaxResponse['success'] = $success;
$ajaxResponse['messages'][] = $success_message;
$jsonString = json_encode($ajaxResponse);
$jsonObject = json_decode($jsonResponse);

PHP Array in JSON String[Bearbeiten]

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[Bearbeiten]

<?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[Bearbeiten]

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[Bearbeiten]

$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$arr = json_decode($json,true);