Ich habe dieses JSON-Objekt in einer Nur-Text-Datei gespeichert:
{
"MySQL": {
"Server": "(server)",
"Username": "(user)",
"Password": "(pwd)",
"DatabaseName": "(dbname)"
},
"Ftp": {
"Server": "(server)",
"Username": "(user)",
"Password": "(pwd)",
"RootFolder": "(rf)"
},
"BasePath": "../../bin/",
"NotesAppPath": "notas",
"SearchAppPath": "buscar",
"BaseUrl": "http:\/\/montemaiztusitio.com.ar",
"InitialExtensions": [
"nem.mysqlhandler",
"nem.string",
"nem.colour",
"nem.filesystem",
"nem.rss",
"nem.date",
"nem.template",
"nem.media",
"nem.measuring",
"nem.weather",
"nem.currency"
],
"MediaPath": "media",
"MediaGalleriesTable": "journal_media_galleries",
"MediaTable": "journal_media",
"Journal": {
"AllowedAdFileFormats": [
"flv:1",
"jpg:2",
"gif:3",
"png:4",
"swf:5"
],
"AdColumnId": "3",
"RSSLinkFormat": "%DOMAIN%\/notas\/%YEAR%-%MONTH%-%DAY%\/%TITLE%/",
"FrontendLayout": "Flat",
"AdPath": "ad",
"SiteTitle": "Monte Maíz: Tu Sitio",
"GlobalSiteDescription": "Periódico local de Monte Maíz.",
"MoreInfoAt": "Más información aquí, en el Periódico local de Monte Maíz.",
"TemplatePath": "templates",
"WeatherSource": "accuweather:SAM|AR|AR005|MONTE MAIZ",
"WeatherMeasureType": "1",
"CurrencySource": "cotizacion-monedas:Dolar|Euro|Real",
"TimesSingular": "vez",
"TimesPlural": "veces"
}
}
Wenn ich versuche, es mit zu dekodieren json_decode()
, wird NULL zurückgegeben. Warum? Die Datei ist lesbar (ich habe versucht, sie wiederzugeben, file_get_contents()
und es hat einwandfrei funktioniert).
Ich habe JSON gegen http://jsonlint.com/ getestet und es ist vollkommen gültig.
Was ist hier los?
Lösung
Auf der Suche nach Antworten bei Google bin ich zu SO zurückgekehrt: json_decode gibt nach dem Webservice-Aufruf NULL zurück . Meine JSON-Datei hatte die UTF-Stücklistenfolge (einige Binärzeichen, die nicht vorhanden sein sollten), wodurch die JSON-Struktur beschädigt wurde. Ging zum Hex-Editor und löschte die Bytes. Alles ist wieder normal. Warum ist das passiert? Weil ich die Datei mit dem Microsoft Windows-Editor bearbeitet habe. Schreckliche Idee!
json_last_error()
.Antworten:
Es könnte die Kodierung der Sonderzeichen sein. Sie können json_last_error () bitten , bestimmte Informationen zu erhalten.
quelle
json_last_error()
weil es PHP 5.2.9 ist. Diese Funktion erscheint in PHP 5.3.0.utf8_decode()
zuerst weitergebe,json_decode()
schlägt dies stillschweigend fehl.Das hat bei mir funktioniert
quelle
Sie könnten es versuchen.
quelle
Wenn Sie die Anforderung in Chrome überprüfen, werden Sie feststellen, dass es sich bei dem JSON um Text handelt. Daher wurde dem JSON ein leerer Code hinzugefügt.
Sie können es mit löschen
$k=preg_replace('/\s+/', '',$k);
Dann können Sie verwenden:
json_decode($k)
print_r
zeigt dann das Array.quelle
$k=preg_replace('/\s+/', ' ',$k);
Ich hatte das gleiche Problem und löste es einfach, indem ich das Anführungszeichen vor dem Dekodieren ersetzte.
Mein JSON-Wert wurde von der Funktion JSON.stringify generiert.
quelle
Vielleicht spielen einige versteckte Charaktere mit Ihrem JSON. Versuchen Sie Folgendes:
quelle
habe es für mich getan. Und ja, auf Chrome testen. Danke an user2254008
quelle
Ich dachte nur, ich würde das hinzufügen, als ich heute auf dieses Problem stieß. Wenn Ihre JSON-Zeichenfolge von Zeichenfolgen aufgefüllt wird, gibt json_decode NULL zurück.
Wenn Sie den JSON aus einer anderen Quelle als einer PHP-Variablen ziehen, ist es ratsam, ihn zuerst zu "trimmen":
quelle
Dies hilft Ihnen zu verstehen, welche Art von Fehler vorliegt
quelle
Sparen Sie einfach einmal. Ich habe 3 Stunden damit verbracht herauszufinden, dass es sich nur um ein Problem mit der HTML-Codierung handelt. Versuche dies
quelle
Wie von Jürgen Math mit der von user2254008 aufgelisteten preg_replace-Methode angegeben, wurde dies auch für mich behoben.
Dies ist nicht auf Chrome beschränkt, es scheint sich um ein Problem mit der Zeichensatzkonvertierung zu handeln (zumindest in meinem Fall Unicode -> UTF8). Dadurch wurden alle Probleme behoben, die ich hatte.
Als zukünftiger Knoten stammte das JSON-Objekt, das ich dekodierte, aus Pythons Funktion json.dumps. Dies wiederum führte dazu, dass einige andere unhygienische Daten weitergegeben wurden, obwohl sie leicht zu verarbeiten waren.
quelle
Wenn Sie json aus der Datenbank erhalten, setzen Sie
nach dem Definieren des Verbindungslinks $ con
quelle
Hier finden Sie einen kleinen JSON-Wrapper mit Korrekturmaßnahmen, die sich mit Stücklisten- und Nicht-ASCI-Problemen befassen: https://stackoverflow.com/a/43694325/2254935
quelle
In meinem Fall liegt dies am einfachen Anführungszeichen in der JSON-Zeichenfolge.
Das JSON-Format akzeptiert nur doppelte Anführungszeichen für Schlüssel und Zeichenfolgenwerte.
Beispiel:
Ich habe dies wegen der Javascript-Syntax verwirrt. In Javascript können wir natürlich Folgendes tun:
aber später, wenn diese Objekte in eine JSON-Zeichenfolge konvertiert werden:
quelle
Ich habe dieses Problem gelöst, indem ich den JSON gedruckt und dann die Seitenquelle überprüft habe (STRG / CMD + U):
Es stellte sich heraus, dass es ein nachfolgendes
<pre>
Tag gab.quelle
Sie sollten diese Punkte sicherstellen
1. Ihre JSON-Zeichenfolge enthält keine unbekannten Zeichen
2. JSON-Zeichenfolge kann vom Online-JSON-Viewer (Sie können auf Google als Online-Viewer oder Parser nach JSON suchen) angezeigt werden. Sie sollte fehlerfrei angezeigt werden
3. Ihre Zeichenfolge hat keine HTML-Entitäten. Es sollte sich um einfachen Text / Zeichenfolge handeln
zur Erläuterung von Punkt 3
to (entferne die Funktion htmlentities ())
quelle
Für mich musste ich die Fehlerberichterstattung deaktivieren , damit json_decode () richtig funktioniert. Es klingt komisch, aber in meinem Fall wahr. Weil zwischen der JSON-Zeichenfolge, die ich zu dekodieren versuche, ein Hinweis gedruckt ist.
quelle
Das Wichtigste, das Sie beachten sollten, wenn Sie ein gültiges NULL-Ergebnis aus JSON-Daten erhalten, ist die Verwendung des folgenden Befehls:
Dh.
Sie beheben das dann mit:
quelle
Also hat html_entity_decode () für mich funktioniert. Bitte versuchen Sie dies.
quelle
quelle