json datei in php array?
Ich möchte wissen wie ich mittels php eine json datei in eine array bekomme. Also wie die Json datei aussehen muss und wie der php part.
Am besten wenn das ganze dann in etwa so aussieht:
<p>
ETWAS TEXT
<? echo $myArray['textabschnitt1'] ?>
NOCH MEHR TEXT
</p>
Danke im Vorraus
1 Antwort
Das JSON muss natürlich valid sein. Deinem Aufruf zufolge würde es so aussehen:
{ "textabschnitt1": "some text" }
Wenn du das Objekt nun von einer externen Quelle aufrufst, dann mache es so:
$json = file_get_contents("someUrl");
$data = json_decode($json, true);
Wenn es hierbei zu Fehlern kommt, dann lasse sie dir ausgeben. Interessant wäre auch der Wert von $json. Bekommst du in jedem Fall ein Objekt in JSON zurück und ist es stets gleich aufgebaut?
Es liegt an den Umlauten. Ich habe einmal deine JSON mit reduzierten Daten ausprobiert.
Schreib es so:
$json = file_get_contents_utf8("data.json");
$data = json_decode($json, true);
echo $data["info_house"];
Wobei die Funktion file_get_contents_utf8 so aussieht:
function file_get_contents_utf8($fn) {
$content = file_get_contents($fn);
return mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}
Sie wurde in der Dokumentation mit als Workaround für Encoding-Probleme aufgeführt.
warum auch immer, wenn ich die datei test.json nenne gehts, aber wenn ich sie de.json nenne nicht
Hast du es mit meinem obigen Lösungsvorschlag probiert?
Hieß die Datei schon vorher de.json? Wenn ja, hänge mal einen URL-Parameter mit an die Anfrage.
de.json?a=1
Vielleicht wird die Datei gecached und hatte zu dem Zeitpunkt des Caching noch eine falsche Zeichenkodierung.
ich hab sie jetzt einfach ger.json genannt, damit klapts. aber die umlaute werden immernoch falsch angezeigt.
<?
function file_get_contents_utf8($fn) {
$content = file_get_contents($fn);
return mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}
$json = file_get_contents_utf8("data/ger.json");
$data = json_decode($json, true);
echo $data["apt1"];
?>
Mit welcher Kodierung ist die JSON-Datei abgespeichert worden? Wenn du sie mit Notepad++ öffnest, siehst du das z.B. unter dem Menüpunkt Kodierung.
Mhn.. setze mal noch den Response Header, gleich in der ersten PHP-Zeile:
header("Content-type: application/json; charset=utf-8");
dann sieht das ganze so aus wie eine json-datei https://arosa-schweiz.de/test.php
es funktioniert wenn ich application/json; zu text/html; ändere. jetzt ist auch alles richtig formatiert
danke! damit ist dieses thema wohl beendet
Achja sorry, du willst die Daten ja auch als HTML ausgeben, nicht als JSON. Gut.
Es kommt kein Output und auch keine fehlermeldung im log
<?
error_reporting(E_ALL);
ini_set('display_errors', 'On');
ini_set('log_errors', 'On');
ini_set('error_log', 'php-errors.log');
phpinfo();
$json = file_get_contents("test.json");
$data = json_decode($json, true);
echo $data["test1"];
?>
das ist die json datei:
{
"test1": "Testtext1",
"test2": "Testtext2"
}
beides im selben ordner
ok, warum auch immer hat es jetzt mit der testdatei funktioniert, aber mit der richtigen json geht immernoch nichts
also das ganze sieht jetzt so aus:
im selben ordner die originaljson(de.json) mit der testjson ersetzt.
dann kam das selbe ergebnis wie davor. (also Testtext1) alles funktioniert.
dann den alten inhalt in die neue originaldatei & php datei angepasst -> geht wieder nix.
dann den testjsontext wieder in die originaldatei (1 zu 1 so wies vorher geklappt hat) -> geht immer noch nix.
onlinejsondebugger kann auch nicht helfen