_json[]
_列_the_array
_が空でないことを確認したい。 normal配列の場合、次の点を確認できます。
_the_array != '{}'
_
ただし、以下に示すように、これは_json[]
_では機能しません。
_select '{}'::json[] != '{}'
ERROR: could not identify an equality operator for type json
_
代わりに次のチェックを使用できます。
_array_length(the_array, 1) != null // yes, array_length on an
empty array returns null
_
私の恐れは、array_length()
が配列全体を反復して項目数をカウントし、そのカウントを返すことです。私の場合、配列の実際のサイズは必要ありません。それが空かどうかを知るだけです。
それで、array_length()
は配列全体を反復しますか?もしそうなら、json配列が空かどうかを確認するより良い方法はありますか?
これはJSON配列を返しません。
_SELECT '{}'::json[]
_
タイプ_json[]
_は「JSON配列」ではなく、タイプJSONのSQL配列です。この種の構造は決して使用しないでください。それはほぼ間違いなく悪いデザインの赤い旗です。
確認したいのは、実際のJSON配列が空ではないことです。これは jsonb_array_length(jsonb)
で実行できます。 JSONはJSON
、またはバイナリjsonの場合はJSONB
として保存されます。
_SELECT jsonb_array_length( '[]'::jsonb );
_
空かどうかを確認するには
_SELECT jsonb_array_length( '[]'::jsonb ) = 0;
_
警告、これはそれらの要素を数えるだけですそれらはnullになる可能性があります、
_SELECT jsonb_array_length( '[null]'::jsonb );
_
したがって、最初に配列で jsonb_strip_nulls()
を呼び出すことができます。