見出し画像

WinActorでのJSON取り扱い① 値の取得編

JSONの値を取得するライブラリは2つあります。
・01_JSON - JSON変数 読み取り
・02_JSON - JSONオブジェクト 値の取得

以下のJSONを、実際に「JSON変数 読み取り」「JSONオブジェクト 値の取得」で読み取ってみましょう。

{
  "id": "chatcmpl-8XrmVLjGwqeQbtJs02OKYgrViJP8i",
  "object": "chat.completion",
  "created": 1703082251,
  "model": "gpt-3.5-turbo-0613",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "{\"Prefecture\": \"石川県\", \"Population\": 10, \"AverageTemperature\": 14, \"TouristAttractions\": \"金沢城、兼六園、21世紀美術館\"}"
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 186,
    "completion_tokens": 55,
    "total_tokens": 241
  },
  "system_fingerprint": null
}

01_JSON - JSON変数 読み取り

設定項目としては、下記の4つ。
・キーは、「.」で繋げれない(よって、1つづキーをひも解く必要あり)
・読み取り目的:転記にすれば、エスケープコードが除外される

読み取り結果は、下記のようになります。
エスケープコードはまだ残ってしまっていますね。01系は複雑なJSON解析に向かないという天の声に従えば、多段になっているためうまく機能していないのではと思います。

実際、下記のようにすると、エスケープコードがない状態で取れました。

①JSONオブジェクト 値の取得でmessageキーまでを取得

②上記で得たstrRecordを「JSON変数 読み取り」のcontentキーで取得

③結果、下記のようにエスケープコードが消えていました。
よって、シンプルなJSONを扱う場合にはエスケープコードが綺麗に消えてくれるようです。


02_JSON - JSONオブジェクト 値の取得

設定項目としては、下記の5つ。
・取得対象キーは、「.」で複数段繋げれる
・配列も指定可能
・取得時に「”」を付与する、しないを選択可能
・区切り文字は、何に使うのか不明(未指定時は、「,」らしい)

なので、階層の深いJSONを取り扱う場合は、02_JSONの「JSONオブジェクト 値の取得」の方が便利。
上記の設定のまま実行すると、下記のように取得されます。

こちらの方が、複数段のキーを指定して目的の値が取得できる一方で、エスケープコードが含まれる場合は、上記のように残ってしまうようです。

これが、19日のイベントで天の声が言われていたバグがどうかわかりませんが…これを踏まえると、現状のver 7.4.4でJSONの値を取得するには、以下のようなフローが良いかと思います。


ver7.4.4でのJSONからの値の取得方法

02_JSONの「JSONオブジェクト 値の取得」で、目的のキーの手前まで取得
01_JSONの「JSON変数 読み取り」で目的のキーを取得

値の取得(JSON)の設定項目
JSON変数 読み取りの設定項目

目的の値を取るのに、2ステップが必要にはなりますが、OpenAI API等、返ってくるJSONにエスケープコードが付与される可能性があるのであれば、この流れになるかと思います。


この記事が気に入ったらサポートをしてみませんか?