2017-10-09 12 views
1

何らかの理由で私の入れ子にされたjsonクエリ結果が二重引用符をエスケープして、アプリケーションで解析エラーを引き起こすと、json結果のユニオン操作に問題があります。ここに例があります:json結果のすべてがjson結果のネストされたjsonクエリをエスケープする

SELECT DISTINCT s.*, 
JSON_QUERY((select * from SomeTable WHERE Id = 'some ID' FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)) AS ExampleColumn from [SomeOtherTable] sot where sot.Id = 'some other ID' 
UNION ALL 
SELECT DISTINCT S1.*, JSON_QUERY((select * from SomeTable WHERE Id = 'some other other ID' FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)) AS ExampleColumn from [SomeOtherTable] sot1 where sot1.Id = 'some other other other ID' FOR JSON PATH 

結果は正しいですが、ネストされたJSON_QUERY結果だけが二重引用符でエスケープされています。誰も私を助けることができますか?

+0

クエリ全体を表示できますか?いくつかのサンプルデータで問題を再現できますか?あなたがそうするなら、本当に簡単に答えを得ることができます。 – gotqn

答えて

1

あなたのクエリはjsonをテキストに変換します。そのため、2番目のjsonはそれらを文字列としてスレッド化し、エスケープされた二重引用符を追加します。

これを試すことができます。それがあなたを助けることを願っています

SELECT STRING_AGG (JsonText,',') FROM (
    SELECT (SELECT DISTINCT sot.*, ExampleColumn.* 
      FROM 
       [SomeOtherTable] sot 
       OUTER APPLY(select * from SomeTable WHERE Id = 'some ID') AS ExampleColumn 
      WHERE 
       sot.Id = 'some other ID' FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER) JsonText 

    UNION ALL 

    SELECT (SELECT DISTINCT sot1.*, ExampleColumn.* 
      FROM 
       [SomeOtherTable] sot1 
       OUTER APPLY((select * from SomeTable WHERE Id = 'some other other ID')) AS ExampleColumn 
      WHERE sot1.Id = 'some other other other ID' FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER) JsonText 
)