ヘッダーをスキップ
Oracle® Big Data Connectorsユーザーズ・ガイド
リリース2 (2.3)
E48215-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

JSONモジュール

このモジュールには、JSONデータを処理するための関数が含まれています。これを使用して、他のファイル形式で埋め込まれているJSONを処理できます。たとえば、大規模なテキスト・ファイルに行として格納されているJSONを問い合せるには、json:parse-as-xmlおよびtext:collection関数を使用します。

現在、大規模なJSONファイルの並列処理はサポートされていません。


JSONを読み取る組込み関数

問合せで組込み関数を使用するには、次のようにJSONモジュールをインポートする必要があります。

import module "oxh:json";

JSONモジュールには、次の関数が含まれています。

json:parse-as-xml

JSON値をXMLとして解析します。

シグネチャ

json:parse-as-xml($arg as xs:string?) as element(*)?

パラメータ

$arg

空の順序を指定できます。

戻り値

JSON値をモデル化するXML要素。$argが空の順序の場合は、空の順序です。

注意

JSONオブジェクトからXMLへの変換について

JSONオブジェクトはAvroマップに似ており、同じXML構造に変換されます。「マップの読取り」を参照してください。

たとえば、次のJSONオブジェクトがXML要素に変換されます。

{ 
   "user" : "john", 
   "full_name" : "John Doe", 
   "age" : 45 
}

オブジェクトは次の要素としてモデル化されます。

<oxh:item>
    <oxh:entry key="user">john</oxh:entry>
    <oxh:entry key="full_name">John Doe</oxh:entry>
    <oxh:entry key="age">45</oxh:entry>
</oxh:item>

JSON配列からXMLへの変換について

JSON配列はAvro配列に似ており、同じXML構造に変換されます。「配列の読取り」を参照してください。

たとえば、次のJSON配列がXML要素に変換されます。

[ "red", "blue", "green" ]

配列は次の要素としてモデル化されます。

<oxh:item>
   <oxh:item>red</oxh:item>
   <oxh:item>blue</oxh:item>
   <oxh:item>green</oxh:item>
</oxh:item>
 

他のJSONタイプの変換について

他のJSON値は次のようにマップされます。

表6-4 JSONタイプの変換

JSON XML

null

空(nilled)の要素

true/false

xs:boolean

number

xs:decimal

string

xs:string


json:get

XMLとしてモデル化されたJSONオブジェクトからエントリを取得します。

シグネチャ

json:get($key as xs:string?, $obj as node()?) as element(oxh:entry)?

または

json:get($key as xs:string?) as element(oxh:entry)?

パラメータ

$key

JSONデータ・キー。

$obj

JSONオブジェクト値。

戻り値

次のXPath式の値。

$obj/oxh:entry[@key eq $key]

$inputが存在しない場合、動作は、2つの引数の関数を呼び出して$objのコンテキスト項目を使用するのと同じです。「注意」を参照してください。

注意

次は同等です。

$var/json:get("key")

json:get("key", $var)
  
$var/oxh:entry[@key eq "key"]
 

$varは、XMLとしてモデル化されたJSONオブジェクトです。「マップの読取り」を参照してください。

JSON関数の例

次の例は、HDFS内の次のテキスト・ファイルを問い合せます。

 mydata/users-json.txt
 
{ "user" : "john", "full name" : "John Doe", "age" : 45 }
{ "user" : "kelly", "full name" : "Kelly Johnson", "age" : 32 }
{ "user" : "laura", "full name" : "Laura Smith", "age" : null }
{ "user" : "phil", "full name" : "Phil Johnson", "age" : 27 }
例1   

次の問合せは、30歳を超えるユーザーの名前を選択します。

import module "oxh:text";
import module "oxh:json";

for $line in text:collection("mydata/users-json.txt")
let $user := json:parse-as-xml($line)
where $user/json:get("age") gt 30
return 
   text:put-text($user/json:get("full name"))

この問合せは、次の行を含むテキスト・ファイルを生成します。

John Doe
Kelly Johnson
例2   

次の問合せは、age値がnullの従業員の名前を選択します。

import module "oxh:text";
import module "oxh:json";

for $line in text:collection("mydata/users-json.txt")
let $user := json:parse-as-xml($line)
where $user/json:get("age")/nilled()
return 
   text:put-text($user/json:get("full name"))
 

この問合せは、次の行を含むテキスト・ファイルを生成します。

Laura Smith