アクション内でトリガーやローカルファイルから読み込むJSON形式のデータからJSONPath関数を使用して値を取得する方法を説明します。

機能

アクション内で JSONPath(json, path) 関数を実行することが出来ます。

引数の json は JSONデータを指定して、path にデータを取得するパスを指定することで戻り値としてその値が取得できます。

 

サンプル

下記のサンプルデータで path を指定するサンプルです。 value は取得できた値となります。

サンプルデータ

{ "store": {
    "book": [ 
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

 

1. 1つ目のbookのauthorの値を取得する

path = $.store.book[0].author
value = "Nigel Rees"

 

2. 全てのbookのauthorの値を取得する

path = $.store.book[*].author
value =  ["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"]

 

3. 3つ目のbookの値を取得する

path = $..book[2]
value =  { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }

 

4. priceの値が10より小さいbookの値を取得する

path = $..book[?(@.price<10)]
value =  [{ "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }]

 

アクション内での使用方法

サンプルとしてGravio AI Editionで使用できるIVARからIVARトリガーで受信できるJSONデータから値を取得する方法のサンプルは下記のようになります。
JSONデータは顔認識の設定をしており、BAPに登録されていない人を推論した時のデータです。

受信データ

{
  "fr": {
    "mmsReturn": "IDENTIFY_SET_NOT_FOUND",
    "indentityGroup": "",
    "fdrVersion": "60032084",
    "candidates": []
  },
  "frV2": null,
  "watchList": null,
  "iod": {
    "ageRange": [
      25,
      32
    ],
    "colors": [
      {
        "lab": [
          224,
          126,
          121
        ],
        "name": "WHITE_NORMAL",
        "weight": 37,
        "rgb": [
          210,
          222,
          234
        ]
      },
      {
        "lab": [
          184,
          128,
          122
        ],
        "name": "WHITE_DARK",
        "weight": 23,
        "rgb": [
          171,
          177,
          187
        ]
      },
      {
        "lab": [
          47,
          132,
          115
        ],
        "name": "BLACK_NORMAL",
        "weight": 14,
        "rgb": [
          39,
          44,
          64
        ]
      },
      {
        "lab": [
          199,
          129,
          136
        ],
        "name": "WHITE_DARK",
        "weight": 8,
        "rgb": [
          201,
          192,
          178
        ]
      }
    ],
    "lowerColors": null,
    "objectId": 50,
    "groupId": 0,
    "objectType": "FACE",
    "line": 0,
    "inOut": null,
    "faceAvailable": true,
    "gender": "MALE",
    "glasses": "NONE",
    "age": "ADULT",
    "liveness": "NO_RESULT",
    "livenessProbability": "0.0000",
    "occlusion": "NA",
    "frSuitable": "NA",
    "template": null,
    "errorMessage": ""
  },
  "iodV2": null,
  "id": "1cc8206d-b22e-45df-9325-6d0810cc8e46",
  "source": {
    "ivarId": "c54ac30f-348e-4375-b01f-85b8e92e16fe",
    "taskId": "31d8ebe2-8ea1-4e5f-a334-7712bd0c4946",
    "channel": 3,
    "bacId": "dfafb276-b5dc-b73f-dfaf-b276b5dcb73f",
    "ivarAddInfo": null,
    "channelAddInfo": null
  },
  "common": {
    "type": "FR_UNKNOWN",
    "tag": null,
    "subtype": null,
    "time": "2020-07-20T00:21:06.842Z",
    "startTime": "0001-01-01T00:00:00",
    "endTime": "0001-01-01T00:00:00",
    "presentImageTime": "2020-07-20T00:21:06.842Z",
    "fileOffset": 0,
    "description": "Face Recognition"
  }
}

 

IVARからのデータ受信の確認

Gravio Studio の DataViewerでIVARからデータを受信できていることを確認します。


 

アクションで値の保存

IVARトリガーから実行されるアクションを作成し、そこにWriteLocalFileコンポーネントのステップ出力に a と b の出力データを定義して、その値にJSONPath関数を使用して fr.mmsReturn と common.type を取得して設定しています。

a = JSONPath (av.Data, "$.fr.mmsReturn") と b = JSONPath (av.Data, "$.common.type") 
出力したファイルの内容 {"b":"FR_UNKNOWN","a":"IDENTIFY_SET_NOT_FOUND"}

※サンプルのアクションではWriteLocalFileの入力が必要なため、ReadCSVを配置してCSVデータを入力としています。

関連リンク

・JSONPathの仕様の詳細は下記を参照してください。
https://goessner.net/articles/JsonPath/

お役に立ちましたか?

はい いいえ
お役に立ちましたか
理由をお聞かせください
フィードバックありがとうございました