2016-04-29 10 views
1

次のjsonデータを解析して、where節で使用しようとしています。Postgres:SQLでのJSONデータの解析

Basic":{ 
    "General":{ 
     "Field1":1234, 
     "Field2":"6.86" 
    }, 
    "Stream 0":{ 
     "Type":"LDAP", 
     "Field4":"LALA1" 
    }, 
    "Stream 1":{ 
     "Type":"KERBEROS", 
     "Field4":"LALA2" 
    }, 
    "Stream 2":{ 
     "Type":"SAML", 
     "Field4":"LALA3" 
    }, 

私はこのようなタグTypeに達することができます。
table.column_json::json->'Basic'->'Stream 0'->'Type'

Stream #の順序は未定義で、以上3個のStreamタグができました。

はどのようにして各ストリームを反復処理しType:"SAML"であるならば、Field4値は"LALA3"で見つけることができます。

答えて

1

あなたが複数の異なるキーを持っているので、あなたを介して検索するには、あなたはK/Vのペアを「解凍」する必要があり、その後、文字列マッチングを実行します。json_each()機能がPG9.3 +であることを

SELECT DISTINCT t.* 
FROM table t, json_each(t.column_json::json->'Basic') j(k, v) 
WHERE j.k LIKE 'Stream%' 
    AND j.v->>'Type' = 'SAML' 
    AND j.v->>'Field4' = 'LALA3'; 

注意を。

+0

'json_each()'は私のために働いていましたが、 '='は 'operator does not exist'エラーを出しています。私は 'j.v - > 'Type' :: varchar = 'SAML''を使ってみましたが、運はありませんでした。 –

+1

ああ、そうです。フィールドを 'text'として取得するには、' - >> '演算子が必要です。更新された回答をご覧ください。 – Patrick