web-dev-qa-db-ja.com

クラスstdClassのオブジェクトを文字列エラーに変換できませんでした

私は次の文字列を持っています:

{"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
6
user2363025

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 マジックメソッドを実装するクラスは文字列に変換できます!

23
Paul Dixon

json_encode($traces)を使用します。これにより、配列が文字列に変換されます。 json_decode()は、文字列を配列またはオブジェクト配列に変換するために使用されます

4
Nabeel Arshad

この$decoded_traces=json_decode($traces, true);を使用してみてください

この代わりに$decoded_traces=json_decode($traces);

StdClassを配列に変換します。ご了承ください $decoded_tracesは配列であるため、必要に応じて使用できます。

3
dakshbhatt21

の代わりに

 $decoded_traces=json_decode($traces);
 echo $decoded_traces;

試してみてください

$decoded_traces=json_decode($traces, true);
print_r $decoded_traces;
0
emmanuel agarry

_$decoded_traces_はオブジェクトです。単にオブジェクトをechoすることはできません。それは、意味がないからです。

オブジェクトをデバッグする場合は、var_dump($decoded_traces)を使用します。

0
deceze