技術ブログ
目次
渡部です。これは、(全部俺) 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データを、JMESPATH式で処理していくわけですが、処理内容は以下の2つの論理的な操作に分解されると渡部は整理しました。(これは渡部の考えであり、一般的に認められたものではありません(たぶん))
スライドの「JSON論理操作」および「部分JSONデータ」という用語は、渡部が独自に考えたもので一般的な用語ではありません。
JSONデータのツリー構造のrootからパスを辿り、与えられたJSONデータから「部分JSONデータ」を抜き出します。 これは比較的直観的にわかりやすいと思います。
ただし、抜き出した「部分JSONデータ」をこの後の変換ステップで使用しますので、 辿るパスの「深さ」は適度なレベルにしておき、変換に必要な全てのデータを含む「部分JSONデータ」が得られるようにしておく必要があります。
抜き出された「部分JSONデータ」が欲しい形式のデータであれば、そこで処理を終了してよいのですが、 抜き出された「部分JSONデータ」が欲しい形式のデータでない場合、欲しい形式に変換する必要があります。
「部分JSONデータ」が、objectの場合とarrayの場合で変換に使える方法が異なるため、それぞれについて説明します。
部分JSONデータがobjectの場合は、比較的わかりやすいと思います。objectに含まれるデータを指定すれば、直観的に欲しい形式に変換できるはずです。
部分JSONデータがarrayの場合、arrayには複数の要素(element)が含まれるため、以下のステップで変換を行います。
以上が基本的なJSON論理操作です。ただし、JSON論理操作を実行した結果得られたJSONデータに対して、さらにJSON論理操作を適用したい場合もあります。その場合はパイプを使用できます。
上記以外にもファンクションや、データのソートなどの操作がありますが、これらについては概念的に難しいものではないので説明は割愛します。ここまで理解できれば、あとは大丈夫なはず!