1. ホーム
  2. php

PHP でオブジェクトに対して json_encode を使用する (スコープに関係なく)

2023-10-03 22:22:20

質問

オブジェクトのリストをjsonで出力しようとしているのですが、オブジェクトを json_encode ? 私が持っているコードは次のようなものです。

$related = $user->getRelatedUsers();
echo json_encode($related);

今現在は、ユーザーの配列を繰り返し、それぞれを配列にエクスポートして json_encode の配列にエクスポートして、私用に使える json に変換しています。 オブジェクトを反復可能にすることはすでに試しましたが json_encode はとにかくそれらをスキップするようです。

編集 : ここで、var_dump()です。

php > var_dump($a);
object(RedBean_OODBBean)#14 (2) {
  ["properties":"RedBean_OODBBean":private]=>
  array(11) {
    ["id"]=>
    string(5) "17972"
    ["pk_UniversalID"]=>
    string(5) "18830"
    ["UniversalIdentity"]=>
    string(1) "1"
    ["UniversalUserName"]=>
    string(9) "showforce"
    ["UniversalPassword"]=>
    string(32) ""
    ["UniversalDomain"]=>
    string(1) "0"
    ["UniversalCrunchBase"]=>
    string(1) "0"
    ["isApproved"]=>
    string(1) "0"
    ["accountHash"]=>
    string(32) ""
    ["CurrentEvent"]=>
    string(4) "1204"
    ["userType"]=>
    string(7) "company"
  }
  ["__info":"RedBean_OODBBean":private]=>
  array(4) {
    ["type"]=>
    string(4) "user"
    ["sys"]=>
    array(1) {
      ["idfield"]=>
      string(2) "id"
    }
    ["tainted"]=>
    bool(false)
    ["model"]=>
    object(Model_User)#16 (1) {
      ["bean":protected]=>
      *RECURSION*
    }
  }
}

で、json_encodeが出すのはこんな感じです。

php > echo json_encode($a);
{}

結局、これだけになってしまいました。

    function json_encode_objs($item){   
        if(!is_array($item) && !is_object($item)){   
            return json_encode($item);   
        }else{   
            $pieces = array();   
            foreach($item as $k=>$v){   
                $pieces[] = "\"$k\":".json_encode_objs($v);   
            }   
            return '{'.implode(',',$pieces).'}';   
        }   
    }   

これは、これらのオブジェクトの完全な配列または単一のインスタンスを取り、それらをjsonに変換します - 私はjson_encodeの代わりにこれを使用しています。 私はそれをより良くすることができる場所があると確信していますが、私はjson_encodeがその公開されたインタフェースに基づいてオブジェクトを介して反復するタイミングを検出することができるだろうと期待していました。

どのように解決するのですか?

RedBeanPHP 2.0では、ビーンのコレクション全体を配列に変換する大量エクスポート関数が用意されています。これはJSONエンコーダーで動作します。

json_encode( R::exportAll( $beans ) );