2017-08-22 13 views
-1

私はHow to search through a JSON Array in PHPのアドバイスを使用して、.jsonファイルの国コードに基づいて国名を検索しようとしています。PHP - NULLを与えるjson_decode

私はこのようにフォーマットされたファイル、countrycodes.jsあります

countries = [ 
    {code: "GB", name: "United Kingdom"}, 
    {code: "AF", name: "Afghanistan"}, 
    // ... 
    {code: "ZM", name: "Zambia"}, 
    {code: "ZW", name: "Zimbabwe"} 
]; 

変数、countriesは、アプリケーションの一部がこれに依存しているので、そこにする必要があります。これは、文字列を出力

$str = file_get_contents('countrycodes.js'); 
var_dump($str); 

はPHPで私は、次のやったしかし

string(9642) "countries = [ 
{code: "GB", name: "United Kingdom"}, 
{code: "AF", name: "Afghanistan"}, 
// ... 

を、私はそれを試してみて、json_decodeとき、以下がNULL与える:

$str = file_get_contents('countrycodes.js'); 
$json = json_decode($str); 
var_dump($json); 

理由はわかりません。json_decodeはこれは私が上に掲示したリンクに与えられたものですか? JavaScript変数(countries =)を削除しようとしましたが、これで違いはありません。

最終的には、PHPに「GB」などの国を渡して、適切なnameを返すようにしたいと考えています。 'イギリス'。私がこれを理解したことは、これが可能になる前に作業する必要があるjson_decode部分です。

助けてください。参考のため

countries =が使用されていた理由はここに与えられたアドバイスに基づいて<select>要素を移植するためのものです:nullを返しjson_decodePopulating select using ajax json array

+1

'countrycodes.js'はJSONではなくJavascriptです... –

+0

ありがとう。それを2つの別々のファイルに保存せずに変換する方法はありますか? – Andy

+1

それはまともではありません。 –

答えて

4

あなたの場合、これは、入力文字列が有効な形式ではないことを意味します。ファイルにJSON文字列ではなくjavascript変数が含まれています。

これは、文字列は、おそらく書式設定する方法である:あなたが 表現を変更しませんない ことができれば、あなたは次のことを行うことができ、Jerodevの答えに拡張

{ 
    "countries": [ 
     {"code": "GB", "name": "United Kingdom"}, 
     {"code": "AF", "name": "Afghanistan"}, 
     {"code": "ZM", "name": "Zambia"}, 
     {"code": "ZW", "name": "Zimbabwe"} 
    ] 
} 
+0

私はそのように見えるようにファイルを再フォーマットすることができます。しかし、これは必然的にファイルの内容に基づいて 'select'要素を生成するために実装するのが苦労していたことを壊してしまいます - 詳細はこちらhttps://stackoverflow.com/questions/45795518/populating-select-using-ajax- json-array/45797083。あなたが与えたフォーマットに基づいて 'select'を設定することは可能ですか?私は両方の要件をカバーするソリューションを考えようとしています。ありがとう。 – Andy

+1

これはjavascriptで非常に良い解決策ではありません。クライアント側でjsonファイルを取得するには、 '' $ .getJSON() '](https://api.jquery.com/jquery.getjson/)関数を見てください。 – Jerodev

+0

@Jerodevあなたはそれが文字列*をフォーマットするべきであることを確認できますか?なぜなら、 'json_decode()'を実行しても 'NULL'を出力として与えているからです。 – Andy

0

ファイルを変更して、キーを引用符で囲むようにします。何かのように、

countries = [ 
    {"code": "GB", "name": "United Kingdom"}, 
    {"code": "AF", "name": "Afghanistan"}, 
    // ... 
    {"code": "ZM", "name": "Zambia"}, 
    {"code": "ZW", "name": "Zimbabwe"} 
]; 

そして、jsonの部分をデコードしてください。

$str = file_get_contents('countrycodes.js'); 
$str = substr($str,12, strlen($str)-13); // do not include the semicolon 
var_dump(json_decode($str)); 

しかし、これは良いアプローチではないので、私はあなたの要素にデータを埋め込むための他の方法を探すことをお勧めします。

12は、[の開始位置です。変数名またはスペースに変更を加えた場合は、(および13)を変更する必要があります。

+1

ありがとうございます。私はJerodevの提案に従ってファイルを再フォーマットすることに満足しています。この問題は、私が9kの評判を持っていた人からhttps://stackoverflow.com/questions/45795518/populating-select-using-ajax-json-array/45797083で与えられた助言に由来しており、その解決策はその特定の問題。私はファイルを再フォーマットし、@ Jerodevが提案したように '$ .getJSON()'を調べます。 – Andy

+0

クール。良い選択! – cipher