2016-04-07 7 views
0

で正規表現を使用してJSONフィールドを抽出します。Oracleは、私が<strong>JSON</strong>文字列からJSONフィールドを抽出するために<strong>正規表現</strong>とOracle <strong>REGEXP_SUBSTR</strong>とOracleのクエリを使用していたOracle REGEXP_SUBSTR

私はコードキーの価値とその価値を得ようとしますが、結果キーの値を取得しようとするとnullを返します。

私はこのクエリを使用しています:

select regexp_replace(regexp_substr('{"code":"001","message":"success","transactionId":437,"results":{"name":"osama"}}','"results":\s*("(\w|)*")', 1, level), '"results":\s*"((\w|)*)"', '\1', 1, 1) results 
from dual 
connect by regexp_substr('{"code":"001","message":"success","transactionId":437,"results":{"name":"osama"}}', '"results":\s*("(\w|)*")', 1, level) is not null; 

このクエリで間違っていますか? ありがとう

+0

これは、\ wが英数字にのみ一致するためです。結果内で一致させようとしている文字列は、中括弧、二重引用符、およびコロンを持つ - '{" name ":" osama "}'です。あなたはoracle 12cにいますか? – ruudvan

+0

ありがとうございます。@ruudvan、いいえ私はオラクル12cを使用していません。正しい表現で私を助けてください。 –

答えて

1

異なるデータ形式が可能です。これは結果として{"name":"osama"}となります。

select regexp_replace(regexp_substr('{"code":"001","message":"success","transactionId":437,"results":{"name":"osama"}}','"results":\s*{"(.*|)*"\}', 1, level), '"results":\s*(\{.*\})', '\1', 1, 1) results 
from dual 
connect by regexp_substr('{"code":"001","message":"success","transactionId":437,"results":{"name":"osama"}}', '"results":\{(.*)"\}', 1, level) is not null; 
+0

私の時間を節約してくれてありがとう、それはうまくいきます –

関連する問題