2009-07-29 12 views
1

クライアントの特定のフィードを使用する際に問題が発生しました。彼らは私に、リモートURLを与えているとレスポンスはJSON文字列そうのようなものです:例の目的のためにPHP&json_decodeを使用したJSONフィードの使用に関するヘルプ

{"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"} 
]} 

が、私はフォーマットを表示するためにフィードを縮小しましたが、実際には関連会社の何百もあります。とにかく、PHP json_decodeを使いたいのですが、結局のところ、これらのアフィリエイトが連想配列で必要になるからです。

私はこのようなものがありますが、生の文字列を取得することになり、json_decodeは実際には連想配列に解析しません。

$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); 

私は飼料自体に「\ n」は文字を維持する必要があるように思えますが、使用している場合、これらは取り除かます:

file_get_contents 

をとにかく、私はあなたが私は何を知っていると思いますその後、私は何が間違っているのか分かりません。私は事前に助けていただきありがとうございます。私はjsonpでjqueryを使用しようとしましたが、後で配列をソートする必要があり、非同期である必要はないので、より理想的です。

アコーン

+0

コードが変更されていることがわかりました。私は正しいprint_rでコードを実行し、サンプルデータでうまくいきました。使用しているフィードを提供できますか? – MitMaro

答えて

5

フィードにユニコードテキストが含まれている可能性があります。試してみてください:

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

更新:

問題を解決しました。 が正しく処理できないjsonデータに\'sのインスタンスがあります。これを解決するには、\を二重にエスケープする必要があります。これは私がやったことです。

<?php 
error_reporting(E_ALL); 
$request_url = 'http://midas.glam.com/publisher_directory_data?network=glam&country=US&publish=Y'; 

$json = file_get_contents($request_url); 
$json = str_replace('\\', '\\\\', $json); 

$decode = json_decode($json, true); 

var_dump($decode); 
+0

それを指摘してくれてありがとうが、それは実際に私のコードで持っていたものです。混乱させて申し訳ありません。その結果、print_r関数は、連想配列の代わりに未処理のJSONフィードを吐き出します。他のアイデア? – Acorn

+0

私の答えを更新しましたが、問題はないかもしれませんが、試してみる価値があります。 – MitMaro

+0

これを試してみると、残りのJSON文字列とともにスラッシュが吐き出されます。 – Acorn

3

あなたしているデータフィードは、バックスラッシュ(たとえば、\ ')と単一引用符(アポストロフィ)をエスケープします。 JSON仕様では、これを行う必要があるとは言わないので、PHPは正しく動作しません。

参照:json_decodeを呼び出す前に

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

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

あなたは 'と' すべての\を交換してくださいすることができます。

+0

おっと、申し訳ありませんが、MitMaroが既に問題を発見したのを見ていませんでした;) – blt04

関連する問題