2017-12-01 9 views
-2

JSONデータを取得してWebアプリケーション内に戻すための外部API呼び出しをしようとしています。ここで PHP Jsonの値が外部API呼び出しから解析されない

は、データがAPI呼び出しから次のようになります。

{ 
"results":[ 
{ 
    "name":"Company1", 
    "ProviderName": "ProviderName1", 
    "ProviderLogo": "/images/some_image1.jpg", 
    "GetURL": "/some_url_path", 
    "Costs": 10000.50 
},{ 
    "name":"Company2", 
    "ProviderName": "ProviderName2", 
    "ProviderLogo": "/images/some_image2.jpg", 
    "applyURL": "/some_url_path", 
    "Costs": 12000.50 
}] 
} 

は、私はPHPを使用しておりますので、私は次のコードを使用しています:JSONはURLから返さ

$api_data = file_get_contents('MY URL'); // Had to use 'encoded_json()' since 'json_decode()' was initially returning NULL $encoded_json = json_encode($api_data); $decoded_json = json_decode($encoded_json); // Now I want to get the specific values from the JSON result but nothing is being returned // I tried using something like this but I'm not getting anything foreach($decoded_json->results as $mydata) { echo 'Decoded Name: ' . $mydata->name . "\n"; } 

ご協力いただきありがとうございます。

EDIT:

したがって、この実際に起こっていたと私は私が実際に最初の場所でエラーをオフに投げていたものを含んでいなかったので、今は、事前にすべての人に謝罪するつもりだ何!

私はJSON Lintを使用し、受け取っていたAPI Jsonデータをすべて入れました。エラーが発生した場所がわかりました。

エラー:

"SomeCostUpper": $some_variable.rawUpperCost 

私は有効なJSONを使用して、私のPHPコードをテストし、問題なく結果を返すことができました。

誰もが、私は本当に混乱のために申し訳ありませんが、あなたの努力のおかげで!

+0

彼らは間違ったJSONを構築する...あなたはそれらを連絡することができますか?彼らは、コストの値の終わりから、を削除する必要があります... "コスト":10000.50、 – shushu304

+0

@ shushu304それは実際に私の部分のtypoだった。私はこの記事のJSONデータを編集しました。 –

+0

@ JeffP。それが問題でない場合は、JSONをデコードする前にエンコードする必要はありません。その行を削除し、JSONをデコードするだけでスクリプトが機能します。 –

答えて

1

JSONデータを取得するウェブサイトはわかりませんが、それは有効なJSONではないため、json_decode()が最初に返されたのはNULLです。存在しないはずの2つのカンマがあります(それぞれcostsの値があります)。

APIコールから返されたJSONデータには、最初にjson_encode()、次にjson_decode()を使用して固定します。あなたの問題は解決したと思うかもしれませんが、内部にあるものを見てみると、使用できるオブジェクトや配列がないことがわかります。$decoded_jsonあなたは

foreach($decoded_json->results as $mydata) 
{ 
    echo 'Decoded Name: ' . $mydata->name . "\n"; 
} 

を実行しようとするとき、それは$decoded_json内部の「文字列」を反復処理することができないので、それが失敗したことを意味

あなたがturned on error reportingを持っていた場合は、次のエラーを見ているだろう:

E_NOTICE : type 8 -- Trying to get property of non-object -- at line n

E_WARNING : type 2 -- Invalid argument supplied for foreach() -- at line n

2
$api_data = file_get_contents('MY URL'); 

あなたは今、そのURL内のデータを含む文字列を持っています。

// Had to use 'encoded_json()' since 'json_decode()' was initially returning NULL 

json_decode場合はNULLを返し、その後、あなたが持っていた文字列が有効なJSONが含まれていません。

$encoded_json = json_encode($api_data); 

これで、URLのデータを含む文字列の文字列表現ができました。

$decoded_json = json_decode($encoded_json); 

これで元の文字列が戻ってきました。

foreach($decoded_json->results as $mydata) 

文字列です。あなたはそれをすることはできません。


あなたはMY URLから取得されたデータを修正する必要があります。あなたは、オブジェクトの最後のエントリの後に不正なカンマを持って

Error: Parse error on line 7: 
..."Costs": 10000.50, }, {  "name": "Comp 
----------------------^ 
Expecting 'STRING', got '}' 

は次のようにあなたにエラーを与えるであろう、JSON Lintのようなツールを使用してください。

これは、文字列をマッシュしたり手書きでJSONを生成したことが原因と考えられます。避けてください。 JSONを生成するために設計されたツールとライブラリを使用します。

+0

くそー、それに私を打つ!たぶん言及しなければならないのは、両方の「コスト」要素の後に実際には2つの不正なカンマがあることです。 –

-2

JSONデータが無効です。ここには有効なJSON構造があります。

最後のelemp "Costs": '10000.50'から '、'を削除し、その値に「10000.50」と二重引用符を使用します。

+0

浮動小数点をカプセル化するために '' '(二重引用符)を使用する必要はありません。 –

+0

はい、二重引用符(")でも使用できます。コンマ(、)を削除する必要がありました。 –

+0

Number型からString型への変更は、ノックオンの影響を受ける重大な変更です。これは慎重な配慮が必要なだけです。 – Quentin

0

JSONはokです、あなたはエンコードしてから、再度デコードする必要はありません...

だけで実行します。

$api_data = file_get_contents('MY URL'); 
$decoded_json = json_decode($api_data); 

foreach($decoded_json->results as $mydata) 
{ 
    echo 'Decoded Name: ' . $mydata->name . "\n"; 
} 
関連する問題