2009-07-29 9 views
1

Ich habe ein Problem mit dem Verbrauch eines bestimmten Feeds für einen Client. Sie haben mir eine Remote-URL gegeben und die Antwort ist ein JSON-String wie folgt:Hilfe bei der Verwendung von JSON-Feed mit PHP & json_decode

{"affiliate": [ 
{"ID":"1", "COUNTRY":"EXAMPLE", "NETWORK":"EXAMPLE", "PRIMARY":"EXAMPLE"}, 
{"ID":"2", "EXAMPLE":"EXAMPLE", "COUNTRY":"EXAMPLE", "NETWORK":"EXAMPLE", "PRIMARY":"EXAMPLE"}, 
{"ID":"3", "TITLE":"EXAMPLE", "COUNTRY":"EXAMPLE", "NETWORK":"EXAMPLE", "PRIMARY":"EXAMPLE"} 
]} 

Zum Beispiel Zwecke, ich habe das Futter schrumpfte das Format zu zeigen, aber in Wirklichkeit gibt es Hunderte von Tochtergesellschaften. Anyway, ich möchte PHP json_decode verwenden, weil ich am Ende diese Affiliates in einem assoziativen Array brauche.

Ich habe so etwas, aber ich bekomme nur die rohe Zeichenfolge und json_decode analysiert es nicht wirklich in ein assoziatives Array.

$request_url = "http://exampleurl.com/feed"; //returns feed like above 

$json = file_get_contents($request_url, true); //getting the file content 

$decode = json_decode($json, true); 

print_r($decode); 

Es scheint, wie ich brauche die „\ n“ Zeichen im Futter selbst zu halten, aber diese erhalten gezupft bei der Verwendung von:

file_get_contents 

Wie auch immer, ich denke, Sie wissen, was ich bin danach bin ich nur nicht sicher, was ich falsch mache. Ich schätze die Hilfe im Voraus. Ich habe versucht, jquery mit jsonp zu verwenden, aber es wäre auf diese Weise ideal, da ich das Array danach sortieren muss und es nicht asynchron sein muss.

Acorn

+0

Ich bemerkte, dass Sie den Code ändern. Ich habe den Code mit der richtigen print_r ausgeführt und es funktionierte gut mit den Beispieldaten. Können Sie den von Ihnen verwendeten Feed bereitstellen? – MitMaro

Antwort

5

Es ist möglich, dass Ihr Feed Unicode-Text enthält. Versuchen:

$decode = json_decode(addslashes($json), true) 

Update:

das Problem gelöst. Es gibt Fälle von \'s in den JSON-Daten, die json_decode nicht richtig behandeln. Um dies zu lösen, müssen Sie die \ doppelt entkommen. Das habe ich getan.

+0

Danke, dass du darauf hinweist, aber das ist genau das, was ich in meinem Code hatte. Entschuldigung für die Verwirrung. Das Ergebnis ist, dass die print_r-Funktion den unformatierten JSON-Feed anstelle des assoziativen Arrays ausgibt. Irgendwelche anderen Ideen? – Acorn

+0

Aktualisiert meine Antwort, möglicherweise nicht das Problem, aber es ist einen Versuch wert. – MitMaro

+0

Versuchte dies und es spuckt nur die Schrägstriche zusammen mit dem Rest der JSON-Zeichenfolge aus. – Acorn

3

Ihr Datenfeed entkoppelt einzelne Anführungszeichen (Apostrophe) mit einem umgekehrten Schrägstrich (z. B. \ '). Die JSON-Spezifikation sagt nicht, dass dies getan werden sollte, und daher verhält sich PHP nicht korrekt.

See: http://bugs.php.net/bug.php?id=42708

Sie können versuchen, alle \ 'mit' ersetzt:

$json = str_replace('\\\'', "'", $json); 

vor json_decode Aufruf.

+0

Hoppla, sorry, habe nicht gesehen, dass MitMaro schon das Problem gefunden hat;) – blt04

Verwandte Themen