2017-05-07 4 views
1

Ich habe den folgenden Code, der json in ein Array konvertiert:Json leeres Array json_decode

$str = file_get_contents('http://localhost/data.json'); 
$decodedstr = html_entity_decode($str); 
$jarray = json_decode($decodedstr, true); 


echo "<pre>"; 
print_r($jarray); 
echo "</pre>"; 

aber mein $jarray hält null Rückkehr ... Ich weiß nicht, warum dies geschieht .. Ich habe meine Json bereits validiert in dieser Frage: validated json question könnte mir jemand sagen, was ich falsch mache? oder was passiert. Danke im Voraus.

, wenn ich meine $ str echo erhalte ich die folgende: image of echo of $str

+0

Haben Sie es ohne den 'html_entity_decode' Schritt versucht und nur' json_decode ($ str, true) '? – rickdenhaan

+3

print die 'json_last_error()' nach 'json_decode' Methode –

+0

oke ich versuchte, ohne die html_entity_decode und es gab immer noch null zurück. wenn ich den json_last_error drucke, bekomme ich 4 – FutureCake

Antwort

1

Sie passieren zu json_decode eine Zeichenfolge , die nicht gültig JSON ist, das ist der Grund NULL zurückgegeben .

Wie ich aus den Kommentaren finden Sie in den Fehlercode Inspektion erzeugen 4 gibt, die die konstanten JSON_ERROR_SYNTAX entsprechen, die der JSON-String nur bedeuten ein Syntaxfehler hat.

(siehe http://php.net/manual/en/function.json-last-error.php)


Sie sollten (Echo) prüfen, was man bekommt von

$str = file_get_contents('http://localhost/data.json'); 

(Sie können Ihre Antwort bearbeiten und veröffentlichen - oder ein Teil davon)

Sicher ist es nicht gültig JSON; das Problem liegt dort: in data.json.

Dann, wie Sie Dinge reparieren und von data.json bekommen, was erwartet wird, würde ich sicherstellen, dass Sie wirklich html_entity_decode auf den abgerufenen Daten verwenden müssen.

Es wäre "weird" html codierte JSON-Daten zu haben.


UPDATE

Mit Blick auf, was Sie von data.json scheinen, um es die JSON-Daten enthält HTML-Entitäten tatsächlich (wie ich die Anwesenheit von &nbsp; s sehen)

Das eigentlich seltsam ist, die Das Richtige zu tun wäre zu beheben, wie data.json generiert wird gewährleistet nicht-HTML-codiert JSON Daten zurückgegeben wird, ist Zeichensatz UTF-8 und die Antwort Inhaltstyp ist Content-Type: application/json.

Wir können das hier nicht vertiefen, da ich nicht weiß woher kommt data.json oder von dem Code, der es erzeugt. Schließlich können Sie eine andere Antwort veröffentlichen.

Also hier ist eine schnelle Lösung vorausgesetzt, dass der richtige Ansatz wäre, was ich gerade oben vorgeschlagen habe.

Wie Sie HTML-Entitäten, nicht Bruch Räume &nbsp; verwandelt sich in 2-Byte-UTF-8-Zeichen (Byte-Wert 196, 160), die nicht gültig für JSON kodierten Daten zu dekodieren.

Die Idee ist, diese Zeichen zu entfernen; Ihr Code wird:

$str = file_get_contents('http://localhost/data.json'); 
$decodedstr = html_entity_decode($str); 

// the character sequence for decoded HTML &nbsp; 
$nbsp = html_entity_decode("&nbsp;"); 

// remove every occurrence of the character sequence 
$decodedstr = str_replace($nbsp, "", $decodedstr); 

$jarray = json_decode($decodedstr, true); 
+0

siehe meine bearbeitete Antwort – FutureCake

+0

@FutureCake aktualisiert die Antwort. – Paolo

+0

Sie sind der echte MVP es funktioniert dank Mann! jetzt sehe ich was ich falsch gemacht habe danke nochmal :) – FutureCake

0

von PHP-Handbuch

http://php.net/manual/en/function.json-decode.php

Return:

... NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit

So

, sicherlich der JSON-String zu json_decode() geben wird, ist nicht gültig:

vielleicht wegen html_entity_decode

+0

also, wenn mein json die Rekursionsbegrenzung überschreitet, wie repariere ich das? Die Daten, die ich bekomme, stammen von einem Kunden. Also kann ich ihn wahrscheinlich nicht bitten, den JSON zu ändern. – FutureCake

+0

@FutureCake der Fehler wird nicht durch übermäßige Rekursion verursacht, sondern durch einen Syntaxfehler (siehe meine Antwort für Details) – Paolo