« Oracle Autonomous Data Warehouse CloudとRedShiftの価格比較 | メイン | [番外編] OCI社内セミナーやりました »

JMESPATH式

渡部です。これは、(全部俺) Oracle Cloud Infrastructure Advent Calendar 2018 の19日目のエントリです。

OCI CLIやAWS CLIは戻り値としてJSONデータを返すため、JSONデータの操作ができる必要があります。

OCI CLIやAWS CLIでは、JSONデータの操作にJMESPATH式を使います。 しかし、JSONデータの構造や操作は、データベースエンジニアが慣れ親しんでいるリレーショナルモデルと大きく異なるため、理解しにくい部分があります。OCIそのものの内容ではありませんが、OCI実務には必要であるため、また自分で明確に理解するため、JMESPATH式について整理してみました。 (実は(全部俺) Oracle Cloud Infrastructure Advent Calendar 2018の記事で一番時間をかけて書いた記事!)

JSONデータの論理構造

まず、そもそもJSONデータがどのような構造をしているのかを整理しておきます。

1217_jmespath01.png

特徴は以下です。

JSON論理操作の処理ステップ

このような形式のJSONデータを、JMESPATH式で処理していくわけですが、処理内容は以下の2つの論理的な操作に分解されると渡部は整理しました。(これは渡部の考えであり、一般的に認められたものではありません(たぶん))

1217_jmespath02.png

  1. rootからパスを辿り、JSONデータから「部分JSONデータ」を抜き出す
  2. (変換が必要な場合、)パスを辿って抜き出した「部分JSONデータ」を欲しい形式のJSONデータに変換する

スライドの「JSON論理操作」および「部分JSONデータ」という用語は、渡部が独自に考えたもので一般的な用語ではありません。

1. rootからパスを辿り、与えられたJSONデータから「部分JSONデータ」を抜き出す

JSONデータのツリー構造のrootからパスを辿り、与えられたJSONデータから「部分JSONデータ」を抜き出します。 これは比較的直観的にわかりやすいと思います。

1217_jmespath03.png

1217_jmespath04.png

ただし、抜き出した「部分JSONデータ」をこの後の変換ステップで使用しますので、 辿るパスの「深さ」は適度なレベルにしておき、変換に必要な全てのデータを含む「部分JSONデータ」が得られるようにしておく必要があります。

2. (変換が必要な場合、)パスを辿って抜き出した「部分JSONデータ」を欲しい形式のJSONデータに変換する

抜き出された「部分JSONデータ」が欲しい形式のデータであれば、そこで処理を終了してよいのですが、 抜き出された「部分JSONデータ」が欲しい形式のデータでない場合、欲しい形式に変換する必要があります。

「部分JSONデータ」が、objectの場合とarrayの場合で変換に使える方法が異なるため、それぞれについて説明します。

2-a. 部分JSONデータがobjectの場合

部分JSONデータがobjectの場合は、比較的わかりやすいと思います。objectに含まれるデータを指定すれば、直観的に欲しい形式に変換できるはずです。

1217_jmespath07.png

1217_jmespath08.png

2-b. 部分JSONデータがarrayの場合

部分JSONデータがarrayの場合、arrayには複数の要素(element)が含まれるため、以下のステップで変換を行います。

  1. どの要素を処理対象にするかを選ぶ
  2. それぞれの要素をどのように変換するかを決める
  3. 変換したそれぞれの要素をarrayにまとめる

1217_jmespath09.png

1217_jmespath10.png

1217_jmespath11.png

1217_jmespath12.png

1217_jmespath13.png

パイプ

以上が基本的なJSON論理操作です。ただし、JSON論理操作を実行した結果得られたJSONデータに対して、さらにJSON論理操作を適用したい場合もあります。その場合はパイプを使用できます。

1217_jmespath14.png

上記以外にもファンクションや、データのソートなどの操作がありますが、これらについては概念的に難しいものではないので説明は割愛します。ここまで理解できれば、あとは大丈夫なはず!

About

2018年12月19日 00:00に投稿されたエントリーのページです。

ひとつ前の投稿は「Oracle Autonomous Data Warehouse CloudとRedShiftの価格比較」です。

次の投稿は「[番外編] OCI社内セミナーやりました」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。