私は次の文字列を持っています:
{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}],"Scan":"Whatever"}
これをphpでデコードしたい。文字列はSQLクエリを介して取得されます。以下のコードを参照してください。
$TrackDetails_Query= "SELECT * FROM Tracks WHERE TrackID='".$TrackNum."' ORDER BY TrackID DESC";
$TrackDetails_Result= mysql_query($TrackDetails_Query) or die (mysql_error());
if (mysql_num_rows($TrackDetails_Result)==0){
echo 'There are no tracks for the number entered';
}
else{
$traces=$row['Traces'];
$decoded_traces=json_decode($traces);
echo $decoded_traces;
}
}
しかし、エラーが発生します:
Catchable fatal error: Object of class stdClass could not be converted to string
StdClassオブジェクトを文字列に変換しようとしているため、エラーが発生します。これはサポートされていません。
_echo $decoded_traces
_の代わりにvar_dump($decoded_traces)
を試してください。これにより、デコードしたオブジェクトの診断ビューが表示されます(これはあなたが望んでいたものだと思います)。あなたはそれがこのように見えるはずです
_class stdClass#1 (2) {
public $Coords =>
array(5) {
[0] =>
class stdClass#2 (4) {
public $Accuracy =>
string(2) "65"
public $Latitude =>
string(18) "53.277720488429026"
public $Longitude =>
string(18) "-9.012038778269686"
public $Timestamp =>
string(39) "Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"
}
[1] => (more of the same, edited for brevity)
[2] =>
[3] =>
[4] =>
}
public $Scan =>
string(8) "Whatever"
}
_
デフォルトでは、 json_encode は上記のようなstdClassオブジェクトを作成します。連想配列が必要な場合は、2番目のパラメーターとしてtrue
を_json_decode
_に渡します。例: $decoded_traces=json_decode($traces, true);
さらに余談ですが、stdClassを文字列に変換することはできませんが、独自のクラスは可能です __ toString マジックメソッドを実装するクラスは文字列に変換できます!
json_encode($traces)
を使用します。これにより、配列が文字列に変換されます。 json_decode()
は、文字列を配列またはオブジェクト配列に変換するために使用されます
この$decoded_traces=json_decode($traces, true);
を使用してみてください
この代わりに$decoded_traces=json_decode($traces);
StdClassを配列に変換します。ご了承ください $decoded_traces
は配列であるため、必要に応じて使用できます。
の代わりに
$decoded_traces=json_decode($traces);
echo $decoded_traces;
試してみてください
$decoded_traces=json_decode($traces, true);
print_r $decoded_traces;
_$decoded_traces
_はオブジェクトです。単にオブジェクトをecho
することはできません。それは、意味がないからです。
オブジェクトをデバッグする場合は、var_dump($decoded_traces)
を使用します。