json datei in php array?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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?


doctorlutschge 
Fragesteller
 28.06.2018, 22:23

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

0
doctorlutschge 
Fragesteller
 28.06.2018, 22:28
@doctorlutschge

ok, warum auch immer hat es jetzt mit der testdatei funktioniert, aber mit der richtigen json geht immernoch nichts

0
doctorlutschge 
Fragesteller
 28.06.2018, 22:55

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

0
regex9  28.06.2018, 23:05
@doctorlutschge

Es liegt an den Umlauten. Ich habe einmal deine JSON mit reduzierten Daten ausprobiert.

0
regex9  28.06.2018, 23:11
@doctorlutschge

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.

1
doctorlutschge 
Fragesteller
 29.06.2018, 22:00
@regex9

warum auch immer, wenn ich die datei test.json nenne gehts, aber wenn ich sie de.json nenne nicht

0
regex9  29.06.2018, 22:02
@doctorlutschge

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.

0
doctorlutschge 
Fragesteller
 29.06.2018, 22:12
@regex9

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"];
?>
0
regex9  29.06.2018, 22:23
@doctorlutschge

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.

0
regex9  29.06.2018, 22:35
@doctorlutschge

Mhn.. setze mal noch den Response Header, gleich in der ersten PHP-Zeile:

header("Content-type: application/json; charset=utf-8");
0
doctorlutschge 
Fragesteller
 29.06.2018, 22:46
@doctorlutschge

es funktioniert wenn ich application/json; zu text/html; ändere. jetzt ist auch alles richtig formatiert

0
regex9  29.06.2018, 23:06
@doctorlutschge

Achja sorry, du willst die Daten ja auch als HTML ausgeben, nicht als JSON. Gut.

0