空のオブジェクトのjsonカラムをクエリするには?
2023-08-11 01:13:48
質問
特定のjsonカラムに空のオブジェクトが含まれるすべての行を見つけたい。
{}
. これは、JSON配列で可能であり、または私がオブジェクトの特定のキーを探している場合です。しかし、私はオブジェクトが空であるかどうかを知りたいだけです。これを行う演算子を見つけることができないようです。
dev=# \d test
Table "public.test"
Column | Type | Modifiers
--------+------+-----------
foo | json |
dev=# select * from test;
foo
---------
{"a":1}
{"b":1}
{}
(3 rows)
dev=# select * from test where foo != '{}';
ERROR: operator does not exist: json <> unknown
LINE 1: select * from test where foo != '{}';
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
dev=# select * from test where foo != to_json('{}'::text);
ERROR: operator does not exist: json <> json
LINE 1: select * from test where foo != to_json('{}'::text);
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
dwv=# select * from test where foo != '{}'::json;
ERROR: operator does not exist: json <> json
LINE 1: select * from test where foo != '{}'::json;
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
どのように解決するのですか?
あるのは
等号(または不等号)演算子がありません。
データ型に対する
json
というデータ型は、全体として、等質性を確立することが難しいからです。考察
jsonb
が、Postgres 9.4以降では可能です。詳細はdba.SE(最終章)のこの関連する回答で説明しています。
SELECT DISTINCT json_column ...
または
... GROUP BY json_column
は同じ理由で失敗します(等号演算子がない)。
式の両辺をキャストして
text
とすることで
=
または
<>
演算子のテキスト表現には多くの可能性があるため、通常は信頼できません。
と同じ
JSON値に対して多くの可能なテキスト表現があるからです。Postgres 9.4以降では、キャストして
jsonb
にキャストしてください。(または
jsonb
を使ってください)。
しかし については この特定のケース ( 空オブジェクト ) はうまく動作します。
select * from test where foo::text <> '{}'::text;
関連
-
ajax return json format Report 500 Internal Server Error
-
[解決済み] SQLです。タイムスタンプの日付から1日分を差し引く
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] JSONファイルをprettyprintする方法は?
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
-
[解決済み] JSONのXSLT対応
-
[解決済み] Postgresで2つのフィールドのMIN()を取得する方法は?
-
[解決済み] Swift 4 の JSONDecoder で、見つからないキーは、オプションのプロパティである必要はなく、デフォルト値を使うことができますか?
-
[解決済み] SwiftでHTMLエンティティをデコードするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】jq: 文字列で配列のインデックスを作成できない
-
[解決済み] 型 '{}' は型 'IntrinsicAttributes & IntrinsicClassAttributes' に代入できません。
-
[解決済み] json gem のインストール中にエラー 'mkmf.rb can't find header files for ruby' が発生する。
-
[解決済み] 複数の列に対してSELECT DISTINCTする方法(またはできる方法)は?
-
[解決済み] JSONオブジェクトに末尾のカンマを使用することは可能ですか?
-
[解決済み] jqを使用して、オブジェクト内の変数の値に基づいてオブジェクトを選択します。
-
[解決済み] JSONファイルのMongoimport
-
[解決済み] fs.writeFileSyncによるJSONオブジェクトのJSONファイルへの書き込み
-
[解決済み] ASP.NETでWebAPIやMVCを使ってJSONを返す。
-
[解決済み] GoでJSONを部分的にマップにアンマーシャルする