Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

IS JSON

データ値が JSON 形式であるかどうか判別します。

Synopsis

scalar-expression IS [NOT] JSON [keyword]

引数

scalar-expression JSON 形式であるかどうか確認するスカラ式。
keyword オプション — VALUE、SCALAR、ARRAY、または OBJECT のいずれか。既定値は VALUE です。

説明

IS JSON 述語は、データ値が JSON 形式であるかどうか判別します。以下の例では、述語が適切な形式の JSON 文字列 (JSON オブジェクトまたは JSON 配列) であるかどうかを判別しています。

  ZNSPACE "SAMPLES"
  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 を返します。詳細は、以下の例を参照してください。

  ZNSPACE "SAMPLES"
  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()
  ZNSPACE "SAMPLES"
  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()
  ZNSPACE "SAMPLES"
  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 と同じです。以下に例を示します。

  ZNSPACE "SAMPLES"
  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 を使用できます。詳細は、このドキュメントの "述語の概要" ページを参照してください。

関連項目

FeedbackOpens in a new tab