2016-11-24 3 views
1

Ich habe einen Server, der einige Daten in JSON bereitstellen. Ich habe versucht, diese Daten mit den üblichen zu bekommen:Get JSON von URL mit file_get_contents

$res = file_get_contents($url); 
$result = json_decode($res); 
var_dump($result); 

Aber $ Ergebnis ist noch ein String. Das Problem ist, dass die Daten, die aus file_get_content stammen, eine alphanumerische Zeichenfolge vor Daten und eine Null nach haben.

so etwas wie:

215ba 
{"@attributes":{"ticker":"FCA"},"info...... // here all json data 
0 

Ich habe bereits json Gültigkeit direkt aus der URL und es ist richtig formatiert, kann ich nicht verstehen, wo Null und 215ba herkomme.

Offensichtlich konnte ich die Saiten Streifen beide beseitigen, aber ich frage mich, ob es eine konkrete Lösung statt eine Abhilfe

war

PS: leider kann ich cURL nicht verwenden

+0

Was ist Codiertyp? –

+0

$ url ist die URL eines unserer Server, die dynamische Daten bereitstellt, aber ich habe bereits die Ausgabe des Servers über JSON-Validierer überprüft und ist korrekt und korrekt formatiert. Der einzige Unterschied zwischen dem Ergebnis des Browsers und dem von file_get_contents sind die alphanumerischen Werte am Anfang und die Null am Ende. – Plastic

+0

Codierungstyp ist UTF-8 – Plastic

Antwort

2

Hinweis auf die Dokumentation für json_decode: http://php.net/manual/en/function.json-decode.php

This function only works with UTF-8 encoded strings..

So etwas könnte es beheben:

$contents = file_get_contents($url); 
$contents = utf8_encode($contents); 
$results = json_decode($contents); 

Wenn das nicht funktioniert Sie regex für neue Linien überprüfen benutzen konnten. Angenommen, der JSON wird immer auf 1 Zeile stehen.

<?php 
$contents = file_get_contents($url); 
$contents = utf8_encode($contents); 
preg_match('/^.+[\n](.+)[\n]./', $contents, $matches); 

//the json is in $matches[1] 
print_r($matches); 
+0

Funktioniert nicht, mein JSON ist bereits UTF-8-codiert – Plastic

+0

Hat es die Ausgabe überhaupt verändert? –

+0

keine Änderung nach utf8_encode ($ contents); – Plastic

1

könnte es sein, dass die JSON enthält UTF8-Zeichen, verwendet also einen BOM-Marker am Anfang der Datei, und Ihre json_decode-Funktion läuft in PHP, für die keine Multi-Byte-Zeichenfolgen aktiviert sind?

+0

Es scheint der Fall, wissen Sie eine effektive Möglichkeit, es zu entfernen? – Plastic

-1

Das Problem, das Sie mich sehr häufig konfrontiert waren, im Idealfall geschieht dies, wenn json Daten nicht so wellformed werden als ein nicht unterstütztes charset in String oder einem gebrochenen String enthalten. Daher versuchen Sie einfach, Ihre Dateiinhalte mit UTF-8-Unterstützung zu dekodieren, nur um auf der sicheren Seite zu sein und Ihr Problem weniger zu komplizieren. Sie könnten entweder die Funktion utf8_encode() in php verwenden oder curl verwenden, um den durch Datei erhaltenen utf-8-Inhalt zu verarbeiten.