2017-02-08 3 views
0

私が解決策を見つけることができないエラーが発生しています。何時間も費やしましたが、まだ修正が見つかりませんでした。多分、あなたは私を助けることができますか?それはperlにあり、これは私が使用しているコードです。malsoned json string perl、youtube api key

method getMusicInformation($strMusicID) { 
    my $strLink = "https://www.googleapis.com/youtube/v3/videos?id=YqeW9_5kURI&key=AIzaSyBpzQDzTu7e59mxD9HxYP3MTdlCUWzuirQ&part=snippet"; 
    my $strDetails = get($strLink); 
    my $arrDetails = decode_json($strDetails); 
    while (my($key, $value) = each(%{$arrDetails})) { 
     if (ref($value) eq 'ARRAY') { 
      while (my($second_key, $second_value) = each(@{$value})) { 
       return $second_value; 
      } 
     } 
    } 

}

と私はコンソールに入るエラーがある:

Error: malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "(end of string)") at Server/Systems/Music.pm line 38. 

ライン38は以下のとおりです。

my $arrDetails = decode_json($strDetails); 

は理解をいただき、ありがとうございます。

+1

そして 'decode_json'を実行しようとしている文字列は何ですか? –

+1

あなたはどのJSONモジュールを使用していますか? JSON.pmとLWP :: Simple it Works For Me™ – Schwern

+1

を文字オフセット0(「文字列の終わり」の前)で使用すると、空の文字列(またはundef)が 'decode_json'に渡されたことを示します。 – ikegami

答えて

4

問題はgetから何も返されないということです。クエリが失敗し、エラーをチェックしていません。 (心配しないで、これを理解するまでにはしばらく時間がかかりました)。手がかりはat character offset 0で、文字列の先頭を意味します。

LWP :: Simpleはあまりにも単純でエラーチェックをサポートしていません。代わりに、完全に吹き飛ばされたLWP :: UserAgentを使用してください。幸いにもit's gotten a lot easier to use。私の場合は

use LWP::UserAgent; 
use Carp; 

... 

my $ua = LWP::UserAgent->new; 
my $response = $ua->get($strLink); 
if(!$response->is_success) { 
    croak "Fetching $strLink failed: ".$response->status_line; 
} 

my $arrDetails = decode_json($response->decoded_content); 

、問題はこれです:

Fetching https://www.googleapis.com/youtube/v3/videos?id=YqeW9_5kURI&key=AIzaSyBpzQDzTu7e59mxD9HxYP3MTdlCUWzuirQ&part=snippet failed: 501 Protocol scheme 'https' is not supported (LWP::Protocol::https not installed) at /Users/schwern/tmp/test.pl line 15. 
    main::getMusicInformation(10) called at /Users/schwern/tmp/test.pl line 30 

だから私はLWPをインストールする必要があります:: httpsのサポートを持っているプロトコル:: httpsを。おそらくあなたもそうです。