たぶん、前処理のいくつかの並べ替えあなたはまた、単にこのループをラップ、あなたのJSON内のすべてのキーを修正するための簡単な手順を書くことができ..
DECLARE @JSON VARCHAR(MAX) = '{ "pippo": "pippo", site: "test" }'
DECLARE @PATH VARCHAR(255) = 'site'
DECLARE @PATTERN VARCHAR(255) = '%[{ ,]'
;WITH
J AS (
SELECT STUFF(@JSON, PATINDEX(@PATTERN + @PATH + ':%', @JSON) +1, LEN(@PATH), '"'[email protected]+'"') NEW_JSON, PATINDEX(@PATTERN + @PATH + ':%', @JSON) p
)
SELECT JSON_VALUE(NEW_JSON, '$.'[email protected]) PATH_VAL
FROM J
出力
PATH_VAL
test
を助けることができますファンクションまたはプロシージャは、更新すること
DECLARE @JSON VARCHAR(MAX) = '{ asite: "test", pippo: "site", site: "test" , "ciccio":"isgood" }'
DECLARE @PATH VARCHAR(255) = '[a-zA-Z]%'
DECLARE @PATTERN VARCHAR(255) = '%[{ ,]'
DECLARE @P INT = 0, @L INT = 0
DECLARE @W VARCHAR(255) = ''
SET @P = PATINDEX(@PATTERN + @PATH + ':%', @JSON)
while @P>0 BEGIN
SET @P = @P +1
SET @L = CHARINDEX(':', @json, @p) - @p
SET @W = SUBSTRING(@JSON, @P, @L)
SET @JSON = STUFF(@JSON, PATINDEX(@PATTERN + @W + ':%', @JSON) + 1, LEN(@W), '"' + @W + '"')
SET @P = PATINDEX(@PATTERN + @PATH + ':%', @JSON)
SELECT @P, @JSON
END
出力:
NEW_JSON
{ "asite": "test", "pippo": "site", "site": "test" , "ciccio":"isgood" }
これは私が恐れていたものです...そして、私が避けたかったものは··· –
私は知っていますが、入力が間違っています。もしJSON_VALUEを使いたいのであれば、それを良いものにする必要があります。上記のロジックを使用すると、値が必要なときにデータを修正する手続きを書くことができます。 – MtwStark
入力全体が偽であるため、すべてのキーがエスケープされています(私の例は単純化して問題を表示しています) 。したがって、ソリューションは出発点ですが、私の問題は解決しません。デコード '{site: "test"、otherkey: "test2"}'は機能しません。私は入力を修正するためにすべての可能なキーの文字列置換を実行して終了しました.. –