178

jsonPostgreSQL 9.3で型をテストしようとしています。というテーブルに という
列がありjsonます。JSON は次のようになります。datareports

{
  "objects": [
    {"src":"foo.png"},
    {"src":"bar.png"}
  ],
  "background":"background.png"
}

「objects」配列の「src」値に一致するすべてのレポートについてテーブルをクエリしたいと考えています。たとえば、一致するすべてのレポートについて DB にクエリを実行できます'src' = 'foo.png'か? に一致するクエリを正常に作成しました"background":

SELECT data AS data FROM reports where data->>'background' = 'background.png'

しかし、"objects"値の配列があるため、機能するものを書くことができないようです。一致するすべてのレポートについて DB にクエリを実行することは可能'src' = 'foo.png'ですか? これらのソースを調べましたが、まだ取得できません:

私もこのようなことを試しましたが、役に立ちませんでした:

SELECT json_array_elements(data->'objects') AS data from reports
WHERE  data->>'src' = 'foo.png';

私はSQLの専門家ではないので、何が間違っているのかわかりません。

4

2 に答える 2

32

タイプjsonとして列を持つテーブルを作成します

CREATE TABLE friends ( id serial primary key, data jsonb);

それではjsonデータを挿入しましょう

INSERT INTO friends(data) VALUES ('{"name": "Arya", "work": ["Improvements", "Office"], "available": true}');
INSERT INTO friends(data) VALUES ('{"name": "Tim Cook", "work": ["Cook", "ceo", "Play"], "uses": ["baseball", "laptop"], "available": false}');

それでは、データを取得するためのクエリをいくつか作成しましょう

select data->'name' from friends;
select data->'name' as name, data->'work' as work from friends;

結果に逆コンマ ( " ) と大括弧 ([ ]) が付いていることに気付いたかもしれません。

    name    |            work            
------------+----------------------------
 "Arya"     | ["Improvements", "Office"]
 "Tim Cook" | ["Cook", "ceo", "Play"]
(2 rows)

使用する値のみを取得するには->>

select data->>'name' as name, data->'work'->>0 as work from friends;
select data->>'name' as name, data->'work'->>0 as work from friends where data->>'name'='Arya';
于 2018-08-30T14:04:14.670 に答える