1

私はよりオブジェクト指向のアプローチを好むので、デコードとエンコードのために json_last_error も処理する独自の json クラスを作成しました。

どういうわけか、json_decode メソッドの depth プロパティに対して php 警告が表示されます。

json_decode メソッドの PHP コア API (Eclipse PDT) は次のようになります。

function json_decode ($json, $assoc = null, $depth = null) {}

ここまでは順調ですが、自分のクラスを次のように書くと:

function my_json_decode ($json, $assoc = null, $depth = null) {
    return json_decode($json, $assoc, $depth);
}

次のように実行してみてください。

$json = '{ "sample" : "json" }';
var_dump( my_json_decode($json) );

次の警告が表示されます。

Warning: json_decode(): Depth must be greater than zero in /

何か見逃しましたか?プロパティ自体を null に設定するメソッドにプロパティの null を渡すと、問題ないはずだと思いました!

使用: サーバー: Apache/2.2.22 (Unix) PHP/5.3.10

助けてくれてありがとう!


[編集]私の理解の漏れがどこにあったかを明確にするために:

Eclipse Indigo + PDT を使用しています。org.eclipse.php.core.language の PDT PHP コア API は、php.net が json_decode について述べているものとは異なります。

json_decode org.eclipse.php.core.language:

json_decode ($json, $assoc = null, $depth = null)

json_decode php.net:

json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
4

4 に答える 4

2

深さは数値であると想定される(int)null == 0ため、$depth には 0 を渡します。PHPマニュアルから512は$depth http://php.net/manual/en/function.json-decode.phpのデフォルト値です

于 2012-07-21T07:49:18.630 に答える
1

Depth は、json_decode の再帰の深さ (INTEGER である必要があります) です。詳細については、マニュアルを参照してください。

あなたがしているのは、$depth を 0 に設定していることです。json オブジェクトの深さは 2 であるため、$depth の最小値は2. また、コードは深さ > 2 の任意の値で正常に動作しますが、デフォルト値の 512 を使用することをお勧めします (最初は 128 で、後に PHP 5.3.0 で 512 に増加しました)。

assocまた、値でなければならないことに注意してくださいbool

于 2012-07-21T07:53:51.810 に答える
1

私見、オブジェクト指向のアプローチは、そのような状況で自転車を発明する価値はありません。たとえば、Yii フレームワークのCJSON::decode メソッドからソース コードを取得するだけです(または、クラス全体を取得する方が優れています)。

json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

深さとして NULL を渡すことはできません。したがって、json_decode() のエイリアスは正しくありません。

于 2012-07-21T07:50:38.073 に答える
0

関数が渡されない場合は、関数と引数が null に設定されているという問題ではありません。問題は、深さのために json_decode に null を渡しているためです。$assocとが null でないかどうかを確認し$depth、null でない場合は適切に json_decode に渡します。また、それが bool であることを明確にし$assoc、デフォルト値をそのまま使用する必要があります。

function my_json_decode ($json, $assoc = false, $depth = null) {
    if ($assoc && !$depth)
        return json_decode($json, $assoc);
    else if ($depth)
        return json_decode($json, $assoc, $depth);
    return json_decode($json);
}

ただし、php-jsonライブラリがこれを処理するため、なぜこれを行う必要があるのか​​ わかりません。

于 2012-07-21T07:56:27.223 に答える