説明
IS JSON 述語は、データ値が JSON 形式であるかどうか判別します。以下の例では、述語が適切な形式の JSON 文字列 (JSON オブジェクトまたは JSON 配列) であるかどうかを判別しています。
SET q1 = "SELECT TOP 5 Name FROM Sample.Person "
SET q2 = "WHERE '{""name"":""Fred"",""spouse"":""Wilma""}' IS JSON"
SET myquery = q1_q2
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = tStatement.%Execute()
DO rset.%Display()
IS JSON は、(オプションの VALUE キーワードの有無を問わず) JSON 配列または JSON オブジェクトに対して True を返します。これには、空の JSON 配列 '[]' や空の JSON オブジェクト '{}' が含まれます。
VALUE キーワードと SCALAR キーワードは同義語です。
IS JSON ARRAY は、JSON 配列の oref に対して True を返します。IS JSON OBJECT は、JSON オブジェクトの oref に対して True を返します。詳細は、以下の例を参照してください。
SET jarray=[1,2,3,5,8,13,21,34]
WRITE "JSON array: ",jarray,!
SET myquery = "SELECT TOP 5 Name FROM Sample.Person WHERE ? IS JSON ARRAY"
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = tStatement.%Execute(jarray)
DO rset.%Display()
SET jarray=[1,2,3,5,8,13,21,34]
WRITE "JSON array: ",jarray,!
SET myquery = "SELECT TOP 5 Name FROM Sample.Person WHERE ? IS JSON OBJECT"
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = tStatement.%Execute(jarray)
DO rset.%Display()
SET jobj={"name":"Fred","spouse":"Wilma"}
WRITE "JSON object: ",jobj,!
SET myquery = "SELECT TOP 5 Name FROM Sample.Person WHERE ? IS JSON OBJECT"
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = tStatement.%Execute(jobj)
DO rset.%Display()
詳細は、ObjectScript SET コマンドのサブセクション “JSON オブジェクトと JSON 配列” を参照してください。
IS NOT JSON 述語は、WHERE 節のストリーム・フィールドで使用可能な述語の 1 つです。その動作は IS NOT NULL と同じです。以下に例を示します。
SET q1 = "SELECT Title,%OBJECT(Picture) AS PhotoOref FROM Sample.Employee "
SET q2 = "WHERE Picture IS NOT JSON"
SET myquery = q1_q2
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = tStatement.%Execute()
DO rset.%Display()
述語条件を指定できる場所であればどこでも IS JSON を使用できます。詳細は、このドキュメントの "述語の概要" ページを参照してください。