2011-07-31 3 views
3

PHPでGoogle Dictionary API JSONレスポンスをデコードしようとしていますが、レスポンスを解析できないような問題が発生しています(json_decodeNULLを返します)。Google辞書APIのjson_decode

JSON応答の例はhere(「oracle」という語を検索しています)です。

JSON APIでは、コールバック関数を提出する必要があるため、処理が不要なため、実際には短いもの(a)を選択しました。

<?php 
$query = 'oracle'; 
$file = file_get_contents('http://www.google.com/dictionary/json?callback=a&q='.$query.'&sl=en&tl=en&restrict=pr,de&client=te'); 
var_dump($file); 
$json = json_decode($file); 
var_dump($json); 
?> 

答えて

5

Googleは、関数呼び出しの形式で結果を返します:

は、ここに私のコードです。あなたはそれを取り除きたい場合は行うことができます。 だから、その部分を取り除く必要があります:

$file = substr($file, 2, -10); 

をさらにすべての進文字は混乱を引き起こします。私はこれらを扱う最善の方法を知らない(彼らは彼らの性格に変換されるべきだが、それについて簡単に考える方法は簡単に考えられる)。テスト目的のために、それらをストリップするだけで(それが動作することを確認することができます)。 試してください:あなたが持っている最終的にはそう

$file = preg_replace("/\\\x[0-9a-f]{2}/", "", $file); 

:特別に、必要に応じて文字を変換するための

<?php 
$query = 'oracle'; 
$file = file_get_contents('http://www.google.com/dictionary/json?callback=a&q='.$query.'&sl=en&tl=en&restrict=pr,de&client=te'); 
// var_dump($file); 
$file = substr($file, 2, -10); 
$file = preg_replace("/\\\x[0-9a-f]{2}/", "", $file); 
echo $file; 
$json = json_decode($file); 
var_dump($json); 
?> 

が、私はあなたがpreg_replace_callbackを使用することができたと、私はその機能を好きではありませんデータはリモートソースからのものです。単純なのは単純に静的なマッピングを持つことです。例:

$from = array("\x3d", "\x22", ...); 
$to = array("=", "\"", ...); 
$file = str_replace($from, $to, $file);