![見出し画像](https://assets.st-note.com/production/uploads/images/125586059/rectangle_large_type_2_25e320ae560292e11b872f4ca663ef55.png?width=800)
WinActorでのJSON取り扱い② キー取得編
こんばんは、かーでぃです。前回、JSONで値の取得方法を取り上げました。
今回は、JSON内に含まれるキーの取得方法について書きたいと思います。
ただ、キーの取得ライブラリを、いつどういった場合に使うのかは…自分の中では結構謎だったりします(笑
恐らく…ですが、返ってくるJSONのフォーマットが毎回違うような場合に、
目的のキーが含まれているのか判断する際にに使うのかなぁ…?
という気はしますが…
テストに使うJSONは前回同様、OpenAI APIから返ってきた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
}
テストに使うシナリオは、下記になります。
![](https://assets.st-note.com/img/1703501300992-y73EW8DQP8.png)
テキストファイルの読み込み
![](https://assets.st-note.com/img/1703501350715-hyxTja0eS8.png)
ここは、JSON関係ないですね。
JSONも中身はテキストファイルなので、普通にテキストファイル読込ライブリで読み込めます。
注意点としては、Ascii形式(メモ帳だとANSI)にした方が無難かも。メモ帳だから…かもしれませんが、UTF-8は色々試しましたが、全角文字が化けました。
キー一覧の取得
こちらを使うと、プロパティは下記の4つが設定できます。
・JSONオブジェクト
→ これは、JSONが含まれている変数を指定します。
・取得対象キー
→ 設定したキー配下の情報を取得する際に使います。
未設定の場合は、全部が取得されます。
・区切り文字
→ 取得したキーとキーのセパレータを指定します。
デフォルトだと「,」になります。
取得後、この区切り文字を使って配列化できます。
・取得したキーの一覧
→ 一覧を格納する変数になります。
区切り文字をセパレータとした文字列になります。
![](https://assets.st-note.com/img/1703501515427-WX8Q6Se8tK.png)
実行結果
下記のように、JSONに含まれるキーがすべて取得されました。
注意点としては、階層を持つ場合でも、フラットにされて出力されます。恐らく、フラットで取得してくれた方が便利なんだと思いますが、「階層化されない」ということは、意識しておいた方が良いかと思います。
![](https://assets.st-note.com/img/1703501758993-sdBCkL104h.png)
使い道
恐らくですが、先にも述べたように、取得したJSONが想像通りのJSONとして返ってきているかどうかを確認するのに使うのだと思います。
例えば、OpenAI APIのテキスト生成APIであれば、「CONTENT」キーに目的値が格納されています。
この際、CONTENTキーを直接参照しにいって、キーが無いとエラーになり最悪シナリオが停止してしまいます。
そうならないようにするため、指定されたJSONにキーが存在するかどうかを調べるのに使うのだろうと推測します。
ちなみに、取得したキーの数を調べるライブラリもあります。上のキーの一覧の取得で取得し配列化した後に、この回数分繰り返し処理を実行することで、すべてのキーを舐めることが可能です。
![](https://assets.st-note.com/img/1703502211073-oERS5eiq0r.png)
実行結果は下記になります。7個、カウントされてますね。
![](https://assets.st-note.com/img/1703502162182-R7PycF0E2U.png)
この記事が気に入ったらサポートをしてみませんか?