0

次のような値オブジェクトを取得したい

class Vo {

    private $blah;
    private $de;

    public function setBlah($blah) {
        $this->blah = $blah;
    }


    public function getBlah() {
        return $this->blah;
    }

    public function setDe($de) {
        $this->de = $de;
    }


    public function getDe() {
        return $this->de;
    }

}

また、ビルドせずに、配列に変換するか、JSONをのようにビルドするメソッドを呼び出します[{"blah" : "something set", "de" : "something set"}]。Java / JbossからPHPに戻り、オブジェクトのメソッドを呼び出すことができ、それがjsonに変換されます。

4

3 に答える 3

4

json_encode()プライベート変数では動作しないため、使用できません。オブジェクトに別の関数を定義する必要があります。

function getJSON() {
    return  '[{"blah" : "'.$this->blah.'", "de" : "'.$this->de.'"}]';
}

コードパッド

編集: PHP 5.4以降、PHPはこれを簡単に提供します。

class Vo implements JsonSerializable  {
    ...

    public function jsonSerialize() {
        return get_object_vars($this);
    }

    ...
}

...

var_dump(json_encode($object));

あなたにあげる:

string(29) "{"blah":"hammer","de":"time"}"

を参照してくださいThe JsonSerializable interface。PHP 5.4を下回っている場合でも、その関数を実装してから手動で呼び出すだけです。

json_encode($object->jsonSerialize());

したがって、それに対処する方法の一般的なパターンがあります。

デモPHP5.4 ; デモPHP5.2

于 2012-10-20T18:30:18.513 に答える
1

json_encode($object)、、で試すことができますjson_decode($jsonObject)。さて、唯一の問題は、json_decodeが適切なオブジェクトを返すのか、それとも指定さStdClassれたプロパティを持つだけを返すのかわからないということです。

json_decode()単純なjsonオブジェクトでを実行しようとしましたが、オブジェクトのオブジェクトに変換されるため、jsonからオブジェクトを取り戻すstdClassことはできません。Voそしてdfsq指摘されているように、jsonは私有財産では機能しません。

、、を実行するserialize($object)unserialize($string)、タイプを元に戻すことができますが、これはPHP固有であり、jsonほど移植性がありません。

これも見てください(php 5.4+): http ://www.php.net/manual/en/class.jsonserializable.php

于 2012-10-20T18:23:43.007 に答える
0

独自のコードを最初から作成している場合は、@Hakre編集を使用して@SomeKittensによって提案された回答を使用するのが良い方法ですが、クラスコードを変更したくない/変更できない場合があります。すべてのプロパティを持つ任意のオブジェクトを簡単にjson_encode作成できますが、それを配列にキャストし、プライベート/保護されたプロパティ名のキーをクリーンアップする必要があります。

/**
 * Encode object to JSON with protected/private variables with nested objects support.
 * @param mixed $object object to be jsonized
 * @param int $jsonEncodeOptions see JSON_* constants
 * @param bool $returnArray for recursive calls
 * @return string|array JSON string, associative array for recursive calls
 */
function json_encode_object($object, $jsonEncodeOptions = 0, $returnArray = FALSE){
    $ret = array();

    foreach((array)$object as $key => $value){

        if(is_resource($value)){
            //$rVal = NULL;
            continue;
        }elseif(is_object($value)){
            $rVal = json_encode_object($value, $jsonEncodeOptions, TRUE);
        }else{
            $rVal = $value;
        }

        $rKey = str_replace(
            array(
                chr(0)."*".chr(0), //protected
                chr(0).get_class($object).chr(0) //private
            )
            ,'',
            $key        
        );

        $ret[$rKey] = $rVal;
    }

    return $returnArray?$ret:json_encode($ret, $jsonEncodeOptions);
}
于 2012-10-20T20:40:35.467 に答える