3.5.10. JSON 関数
JSON 関数は、JSON (JavaScript Object Notation)データを操作する機能を提供します。
サンプル用のデータのサンプル
XML 関数で提供される例は、以下のテーブル構造を使用します。
データを使用
customerid | CustomerName | ContactName | アドレス | City | PostalCode | 国 |
---|---|---|---|---|---|---|
87 | Wartian Herku | Pirkko Koskitalo | Torikatu 38 | Oulu | 90110 | フィンランド |
88 | Wellington Importadora | 親の親 | Rua do Mercado, 12 | Resende | 08737-363 | ブラジル |
89 | white CloverMarks | karl Jablonski | 305 - 14th Ave.S. Suite 3B | Seattle | 98128 | USA |
JSONARRAY
JSON アレイを返します。
JSONARRAY(value...)
JSONARRAY(value...)
value
は、JSON 値に変換できるオブジェクトです。詳細は、「 JSON 関数 」を参照してください。戻り値は JSON です。
null 値は結果に null リテラルとして含まれます。
混合値の例
jsonArray('a"b', 1, null, false, {d'2010-11-21'})
jsonArray('a"b', 1, null, false, {d'2010-11-21'})
戻り値
["a\"b",1,null,false,"2010-11-21"]
["a\"b",1,null,false,"2010-11-21"]
テーブルでの JSONARRAY の使用
JSONOBJECT
JSON オブジェクトを返します。
JSONARRAY(value [as name] ...)
JSONARRAY(value [as name] ...)
value
は、JSON 値に変換できるオブジェクトです。詳細は、「 JSON 関数 」を参照してください。戻り値は JSON です。
null 値は結果に null リテラルとして含まれます。
名前が指定されておらず、式が列参照である場合は、exprN が使用されます。ここで、N は JSONARRAY 式の値の 1 ベースのインデックスです。
混合値の例
jsonObject('a"b' as val, 1, null as "null")
jsonObject('a"b' as val, 1, null as "null")
戻り値
{"val":"a\"b","expr2":1,"null":null}
{"val":"a\"b","expr2":1,"null":null}
テーブルでの JSONOBJECT の使用
別の例
別の例
JSONPARSE
JSON 結果を検証し、返します。
JSONPARSE(value, wellformed)
JSONPARSE(value, wellformed)
値
は、適切な JSON バイナリーエンコーディング(UTF-8、UTF-16、または UTF-32)を持つ Blob です。適切にフォーマットされたものは、検証をスキップする必要があることを示すブール値です。戻り値は JSON です。
いずれかの入力の null は null を返します。
JSON 単純なリテラル値の解析
jsonParse('{"Customer":{"CustomerId":88, "CustomerName":"Wellington Importadora"}}', true)
jsonParse('{"Customer":{"CustomerId":88, "CustomerName":"Wellington Importadora"}}', true)
JSONARRAY_AGG
null 値を含む Clob として JSON アレイの結果を作成します。これは JSONARRAY と似ていますが、その内容を単一のオブジェクトに集約します。
SELECT JSONARRAY_AGG(JSONOBJECT(CustomerId, CustomerName)) FROM Customer c WHERE c.CustomerID >= 88; ========================================================== [{"CustomerId":88, "CustomerName":"Wellington Importadora"}, {"CustomerId":89, "CustomerName":"White Clover Markets"}]
SELECT JSONARRAY_AGG(JSONOBJECT(CustomerId, CustomerName))
FROM Customer c
WHERE c.CustomerID >= 88;
==========================================================
[{"CustomerId":88, "CustomerName":"Wellington Importadora"}, {"CustomerId":89, "CustomerName":"White Clover Markets"}]
アレイを以下のようにラップすることもできます。
SELECT JSONOBJECT(JSONARRAY_AGG(JSONOBJECT(CustomerId as id, CustomerName as name)) as Customer) FROM Customer c WHERE c.CustomerID >= 88; ========================================================== {"Customer":[{"id":89,"name":"Wellington Importadora"},{"id":100,"name":"White Clover Markets"}]}
SELECT JSONOBJECT(JSONARRAY_AGG(JSONOBJECT(CustomerId as id, CustomerName as name)) as Customer)
FROM Customer c
WHERE c.CustomerID >= 88;
==========================================================
{"Customer":[{"id":89,"name":"Wellington Importadora"},{"id":100,"name":"White Clover Markets"}]}
JSON への変換
適切な JSON ドキュメントフォームに値を変換するのに、単純な仕様に準拠する変換が使用されます。
- null 値は null リテラルとして含まれます。
- JSON として解析された値、または JSON コンストラクト関数(JSONPARSE、JSONARRAY、JSONARRAY_AGG)から返される値は、JSON 結果に直接追加されます。
- ブール値は true/false リテラルとして含まれます。
- 数値はデフォルトの文字列変換として含まれます。数字または + インフィナリティーの結果が許可されていない場合は、無効な JSON を取得できる場合があります。
- 文字列の値はエスケープまたは引用形式に含まれます。
- バイナリーの値は暗黙的に JSON 値に変換可能で、JSON に含まれる前に特定の値を必要とします。
- その他の値はすべて、適切なエスケープ/引用形式で文字列変換として含まれます。
JSONTOXML
JSON から XML ドキュメントを返します。
JSONTOXML(rootElementName, json)
JSONTOXML(rootElementName, json)
rootElementName
は文字列で、json
は {clob, blob} にあります。戻り値は XML です。
適切な UTF エンコーディング(8、16LE)。16BE、32LE、32BE)が JSON Blob について検出されます。別のエンコーディングを使用する場合は、String 関数の TO_CHARS 関数 を参照してください。
結果は常に適切な形式の XML ドキュメントになります。
XML へのマッピングでは、以下のルールを使用します。
- 現在の要素名は最初に rootElementName であり、JSON 構造が通過するのでオブジェクト値名になります。
- すべての要素名は有効な XML 1.1 名である必要があります。無効な名前は、SQLXML 仕様に従って完全にエスケープされます。
- 各オブジェクトまたはプリミティブ値は、現在の名前で要素で囲まれます。
- 配列の値がルートでない限り、追加要素で囲まれません。
- null 値は、xsi:nil="true" 属性を持つ空の要素によって表されます。
- boolean および number の値要素では、属性 xsi:type はそれぞれ boolean と 10 進数に設定されます。
JSON:
jsonToXml('person', x)の XML へのサンプル
{"firstName" : "John" , "children" : [ "Randy", "Judy" ]}
{"firstName" : "John" , "children" : [ "Randy", "Judy" ]}
XML:
jsonToXml('person', x)の XML へのサンプル
JSON:
ルートアレイを使用した jsonToXml('person', x)の XML へのサンプル
[{"firstName" : "George" }, { "firstName" : "Jerry" }]
[{"firstName" : "George" }, { "firstName" : "Jerry" }]
XML(より適切に形式の XML を維持するために、追加の "person" wrapping 要素がある点に注意してください)。
ルートアレイを使用した jsonToXml('person', x)の XML へのサンプル
JSON:
無効な名前を持つ jsonToXml('root', x)の XML へのサンプル
{"/invalid" : "abc" }
{"/invalid" : "abc" }
XML:
無効な名前を持つ jsonToXml('root', x)の XML へのサンプル
<?xml version="1.0" ?> <root> <_x002F_invalid>abc</_x002F_invalid> </root>
<?xml version="1.0" ?>
<root>
<_x002F_invalid>abc</_x002F_invalid>
</root>
以前のリリース以前は、xXXXX ではなく uXXXX エスケープを使用しないと誤って使用していました。その動作に依存する必要がある場合は、org.teiid.useXMLxEscape システムプロパティーを参照してください。
JsonPath
JsonPath 式の処理は Jayway JsonPath によって提供されます。1 ベースのインデックスではなく、0 ベースのインデックスを使用することに注意してください。さまざまなパス式で想定された戻り値を熟知していることを確認してください。たとえば、行の JsonPath 式がアレイを提供することを想定している場合は、その配列が不要なパス式によって自動的に返されるアレイではなく、希望の配列であることを確認します。
パス名で '.' などの予約文字が使用される状況が発生した場合は、任意のキー($['.key'] など)を許可するため、括弧付きの JsonPath 表記を使用する必要があります。
詳細は、「 JSONTABLE 」を参照してください。
JSONPATHVALUE
単一の JSON 値を文字列として抽出します。
JSONPATHVALUE(value, path [, nullLeafOnMissing])
JSONPATHVALUE(value, path [, nullLeafOnMissing])
値
は clob JSON ドキュメントで、path
は JsonPath 文字列で、nullLeafOnMissing
はブール値です。戻り値は、結果となる JSON の文字列値です。
nullLeafOnMissing
が false(デフォルト)の場合は、見つからないリーフに評価されるパスによって例外が発生します。nullLeafOnMissing
が true の場合、null 値が返されます。
値が、indefinite パス式によって生成された配列である場合、最初の値のみが返されます。
jsonPathValue('{"key":"value"}' '$.missing', true)
jsonPathValue('{"key":"value"}' '$.missing', true)
戻り値
null
null
jsonPathValue('[{"key":"value1"}, {"key":"value2"}]' '$..key')
jsonPathValue('[{"key":"value1"}, {"key":"value2"}]' '$..key')
戻り値
value1
value1
JSONQUERY
JSON ドキュメントに対して JsonPath 式を評価し、JSON 結果を返します。
JSONQUERY(value, path [, nullLeafOnMissing])
JSONQUERY(value, path [, nullLeafOnMissing])
値
は clob JSON ドキュメントで、path
は JsonPath 文字列で、nullLeafOnMissing
はブール値です。戻り値は JSON 値です。
nullLeafOnMissing
が false(デフォルト)の場合は、見つからないリーフに評価されるパスによって例外が発生します。nullLeafOnMissing
が true の場合、null 値が返されます。
jsonPathValue('[{"key":"value1"}, {"key":"value2"}]' '$..key')
jsonPathValue('[{"key":"value1"}, {"key":"value2"}]' '$..key')
戻り値
["value1","value2"]
["value1","value2"]