質問

特定のフィードをクライアントに使用する際に問題が発生しました。彼らは私にリモートURLを与え、応答は次のような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

とにかく、あなたは私が何を求めているか知っていると思う、私は私が間違っているのか分からない。事前に感謝します。 jqueryをjsonpで使用しようとしましたが、後で配列をソートする必要があり、非同期である必要がないため、この方法の方が理想的です。

ドングリ

役に立ちましたか?

解決

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

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

更新:

問題を解決しました。 jsonデータには、 json_decode が適切に処理しない \ '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);

他のヒント

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

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

すべての\ 'を':

に置き換えてみてください。
$json = str_replace('\\\'', "'", $json);

json_decodeを呼び出す前。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top