0 フォロワー

クラス yii\helpers\BaseJson

継承yii\helpers\BaseJson
サブクラスyii\helpers\Json
利用可能なバージョン2.0
ソースコード https://github.com/yiisoft/yii2/blob/master/framework/helpers/BaseJson.php

BaseJsonはyii\helpers\Jsonの具体的な実装を提供します。

BaseJsonを使用しないでください。yii\helpers\Json を代わりに使用してください。

公開プロパティ

継承されたプロパティを非表示

プロパティ 説明 定義元
$jsonErrorMessages array PHP <= 5.5 のより良い処理のために定数名に割り当てられたJSONエラーメッセージのリスト。 yii\helpers\BaseJson
$keepObjectType boolean インデックスが0から始まるキーを持つオブジェクトが配列としてエンコードされるのを防ぎます。`Json::encode((object)['test'])` は配列ではなくオブジェクトとしてエンコードされます。 yii\helpers\BaseJson
$prettyPrint boolean|null 人間が読みやすい出力(別名)を有効にします。 yii\helpers\BaseJson

公開メソッド

継承されたメソッドを非表示

メソッド 説明 定義元
decode() 与えられたJSON文字列をPHPのデータ構造にデコードします。 yii\helpers\BaseJson
encode() 与えられた値をJSON文字列にエンコードします。 yii\helpers\BaseJson
errorSummary() 検証エラーのサマリーを生成します。 yii\helpers\BaseJson
htmlEncode() 与えられた値をHTMLエンティティをエスケープしたJSON文字列にエンコードし、HTMLコードに埋め込むことが安全になります。 yii\helpers\BaseJson

保護されたメソッド

継承されたメソッドを非表示

メソッド 説明 定義元
handleJsonError() encode()decode() のエラーを、それぞれのエラーメッセージを含む例外をスローすることで処理します。 yii\helpers\BaseJson
processData() `json_encode()` に送信する前にデータを前処理します。 yii\helpers\BaseJson

プロパティの詳細

継承されたプロパティを非表示

$jsonErrorMessages public static property (バージョン 2.0.7 以降で使用可能)

PHP <= 5.5 のより良い処理のために定数名に割り当てられたJSONエラーメッセージのリスト。

public static array $jsonErrorMessages = [
    
'JSON_ERROR_SYNTAX' => '構文エラー',
    
'JSON_ERROR_UNSUPPORTED_TYPE' => 'サポートされていない型',
    
'JSON_ERROR_DEPTH' => '最大スタック深度を超えました',
    
'JSON_ERROR_STATE_MISMATCH' => '無効または不正なJSON',
    
'JSON_ERROR_CTRL_CHAR' => '制御文字エラー、おそらく正しくエンコードされていません',
    
'JSON_ERROR_UTF8' => '不正なUTF-8文字、おそらく正しくエンコードされていません',
]
$keepObjectType public static property (バージョン 2.0.44 以降で使用可能)

インデックスが0から始まるキーを持つオブジェクトが配列としてエンコードされるのを防ぎます。`Json::encode((object)['test'])` は配列ではなくオブジェクトとしてエンコードされます。これは `json_encode()` の動作と一致します。後方互換性の問題を回避するために、デフォルトはfalseです。単一目的で有効にするには:`Json::$keepObjectType = true;`

すべてのJSONレスポンスに対して有効にするには、yii\web\JsonResponseFormatter のドキュメントを参照してください。

public static boolean $keepObjectType false
$prettyPrint public static property (バージョン 2.0.43 以降で使用可能)

人間が読みやすい出力(別名 Pretty Print)を有効にします。これは開発中のデバッグに役立ちますが、本番環境では推奨されません!`prettyPrint` が `null`(デフォルト)の場合、`encode` 関数に渡される `options` は変更されません。

public static boolean|null $prettyPrint null

メソッドの詳細

継承されたメソッドを非表示

decode() public static メソッド

与えられたJSON文字列をPHPのデータ構造にデコードします。

public static mixed decode ( $json, $asArray true )
$json string

デコードするJSON文字列

$asArray boolean

連想配列としてオブジェクトを返すかどうか。

戻り値 mixed

PHPデータ

例外 yii\base\InvalidArgumentException

デコードエラーが発生した場合

                public static function decode($json, $asArray = true)
{
    if (is_array($json)) {
        throw new InvalidArgumentException('Invalid JSON data.');
    } elseif ($json === null || $json === '') {
        return null;
    }
    $decode = json_decode((string) $json, $asArray);
    static::handleJsonError(json_last_error());
    return $decode;
}

            
encode() public static メソッド

与えられた値をJSON文字列にエンコードします。

このメソッドは、JavaScript式をサポートすることで`json_encode()`を拡張しています。特に、yii\web\JsExpressionオブジェクトとして表現されているJavaScript式はエンコードされません。

JSONとしてエンコードされたデータは、JSON仕様に従ってUTF-8でエンコードされている必要があります。このメソッドに渡す文字列は、適切なエンコーディングであることを確認する必要があります。

public static string encode ( $value, $options 320 )
$value mixed

エンコードするデータ。

$options integer

エンコードオプション。詳細については、https://www.php.net/manual/en/function.json-encode.phpを参照してください。デフォルトは`JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE`です。

戻り値 string

エンコード結果。

例外 yii\base\InvalidArgumentException

エンコードエラーが発生した場合。

                public static function encode($value, $options = 320)
{
    $expressions = [];
    $value = static::processData($value, $expressions, uniqid('', true));
    set_error_handler(function () {
        static::handleJsonError(JSON_ERROR_SYNTAX);
    }, E_WARNING);
    if (static::$prettyPrint === true) {
        $options |= JSON_PRETTY_PRINT;
    } elseif (static::$prettyPrint === false) {
        $options &= ~JSON_PRETTY_PRINT;
    }
    $json = json_encode($value, $options);
    restore_error_handler();
    static::handleJsonError(json_last_error());
    return $expressions === [] ? $json : strtr($json, $expressions);
}

            
errorSummary() public static メソッド (バージョン2.0.14から利用可能)

検証エラーのサマリーを生成します。

public static string errorSummary ( $models, $options = [] )
$models yii\base\Model|yii\base\Model[]

バリデーションエラーを表示するモデル。

$options array

名前と値のペアで指定されたタグオプション。以下のオプションは特別に扱われます。

  • showAllErrors: boolean, trueに設定すると、各属性のすべてのエラーメッセージが表示されます。そうでなければ、各属性の最初のエラーメッセージのみが表示されます。デフォルトは`false`です。
戻り値 string

生成されたエラーサマリー

                public static function errorSummary($models, $options = [])
{
    $showAllErrors = ArrayHelper::remove($options, 'showAllErrors', false);
    $lines = self::collectErrors($models, $showAllErrors);
    return static::encode($lines);
}

            
handleJsonError() protected static メソッド (バージョン2.0.6から利用可能)

encode()decode() のエラーを、それぞれのエラーメッセージを含む例外をスローすることで処理します。

protected static void handleJsonError ( $lastError )
$lastError integer

json_last_error()からのエラーコード。

例外 yii\base\InvalidArgumentException

エンコード/デコードエラーが発生した場合。

                protected static function handleJsonError($lastError)
{
    if ($lastError === JSON_ERROR_NONE) {
        return;
    }
    if (PHP_VERSION_ID >= 50500) {
        throw new InvalidArgumentException(json_last_error_msg(), $lastError);
    }
    foreach (static::$jsonErrorMessages as $const => $message) {
        if (defined($const) && constant($const) === $lastError) {
            throw new InvalidArgumentException($message, $lastError);
        }
    }
    throw new InvalidArgumentException('Unknown JSON encoding/decoding error.');
}

            
htmlEncode() public static メソッド (バージョン2.0.4から利用可能)

与えられた値をHTMLエンティティをエスケープしたJSON文字列にエンコードし、HTMLコードに埋め込むことが安全になります。

このメソッドは、JavaScript式をサポートすることで`json_encode()`を拡張しています。特に、yii\web\JsExpressionオブジェクトとして表現されているJavaScript式はエンコードされません。

JSONとしてエンコードされたデータは、JSON仕様に従ってUTF-8でエンコードされている必要があります。このメソッドに渡す文字列は、適切なエンコーディングであることを確認する必要があります。

public static string htmlEncode ( $value )
$value mixed

エンコードするデータ

戻り値 string

エンコード結果

例外 yii\base\InvalidArgumentException

エンコードエラーが発生した場合

                public static function htmlEncode($value)
{
    return static::encode($value, JSON_UNESCAPED_UNICODE | JSON_HEX_QUOT | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS);
}

            
processData() protected static メソッド

`json_encode()` に送信する前にデータを前処理します。

protected static mixed processData ( $data, &$expressions, $expPrefix )
$data mixed

処理するデータ

$expressions array

JavaScript式の集合

$expPrefix string

内部的にJS式の処理に使用されるプレフィックス

戻り値 mixed

処理されたデータ

                protected static function processData($data, &$expressions, $expPrefix)
{
    $revertToObject = false;
    if (is_object($data)) {
        if ($data instanceof JsExpression) {
            $token = "!{[$expPrefix=" . count($expressions) . ']}!';
            $expressions['"' . $token . '"'] = $data->expression;
            return $token;
        }
        if ($data instanceof \JsonSerializable) {
            return static::processData($data->jsonSerialize(), $expressions, $expPrefix);
        }
        if ($data instanceof \DateTimeInterface) {
            return static::processData((array)$data, $expressions, $expPrefix);
        }
        if ($data instanceof Arrayable) {
            $data = $data->toArray();
        } elseif ($data instanceof \Generator) {
            $_data = [];
            foreach ($data as $name => $value) {
                $_data[$name] = static::processData($value, $expressions, $expPrefix);
            }
            $data = $_data;
        } elseif ($data instanceof \SimpleXMLElement) {
            $data = (array) $data;
            // Avoid empty elements to be returned as array.
            // Not breaking BC because empty array was always cast to stdClass before.
            $revertToObject = true;
        } else {
            /*
             * $data type is changed to array here and its elements will be processed further
             * We must cast $data back to object later to keep intended dictionary type in JSON.
             * Revert is only done when keepObjectType flag is provided to avoid breaking BC
             */
            $revertToObject = static::$keepObjectType;
            $result = [];
            foreach ($data as $name => $value) {
                $result[$name] = $value;
            }
            $data = $result;
            // Avoid empty objects to be returned as array (would break BC without keepObjectType flag)
            if ($data === []) {
                $revertToObject = true;
            }
        }
    }
    if (is_array($data)) {
        foreach ($data as $key => $value) {
            if (is_array($value) || is_object($value)) {
                $data[$key] = static::processData($value, $expressions, $expPrefix);
            }
        }
    }
    return $revertToObject ? (object) $data : $data;
}