mecobalamin’s diary

人間万事塞翁が馬

iOSのショートカットでJSONファイルを使う

iOSのショートカットアプリでJSONファイルを使えたのでメモ

目的はショートカットアプリで
ポケモンの攻撃と防御の相性を表示すること
相性の組み合わせをJSONファイルに記録した
どっかのサイトを見ながら入力したので
間違っているところもあるかも

ここから本題

jsonとは
JavaScript Object Notation - Wikipedia
JSONとは| Oracle 日本

大きくやることは2つ

  1. JSONファイルの作成
  2. ショートカットアプリの編集

作成したJSONファイルはpokemon.jsonとして
iCloud以下の/Shortcuts/pokemon/に保存した
ファイルの内容はこの記事の最後に掲載した

ショートカットアプリでやることは

  1. JSONファイルの読み込み
  2. ファイルから辞書を読み込み
  3. 辞書から選択肢を作成
  4. 選択した項目の値を取得
  5. 値からテキストを作成して表示する

ポイントは変数をマジック変数で取得すること
他の言語の感覚だと変数を用意して
代入して使用するが
マジック変数を使うと変数を定義しなくても
任意の場所に任意の変数を読み込める

これは視覚的にプログラミングできて便利

マジック変数は赤丸で
囲んだボタンを使って取得する
f:id:mecobalamin:20210613061209j:plain

実際の作業はここから
ショートカットアプリの編集
1. JSONファイルの読み込み
f:id:mecobalamin:20210613055111j:plain
JSONファイルのパスを設定する
サービスをiCloud
ファイルパスを/Shortcuts/pokemon/
ファイル名をpokemon.json
とした

2. ファイルから辞書を読み込み
f:id:mecobalamin:20210613055125j:plain
アクションの検索から
"入力から辞書を取得"を選択
入力が"辞書"以外なら消去して
マジック変数を選択、
1.で読み込んだファイルを指定する

3. 辞書から選択肢を作成
アクションの検索から
"リストから選択"を選ぶ
入力が"辞書"以外なら消去して
マジック変数を使って
2.で取得した辞書を指定する

4. 選択した項目の値を取得
f:id:mecobalamin:20210613055148j:plain
アクションの検索から
"辞書の値を取得"を選ぶ
入力はマジック変数を使って
3.で"辞書の値"を選び
キーに"こうかばつぐん"を入力する
同様に"こうかいまひとつ"、
"こうかなし"を入力したアクションも作成する

5. 値からテキストを作成して表示する
f:id:mecobalamin:20210613061209j:plain
出力するテキストも
マジック変数を使って
4.で取得した辞書の値を選択する

実行するとJSONをもとに作られた
選択が表示される
f:id:mecobalamin:20210628112538p:plain

技のタイプを選ぶと
技の相性のリストが表示される
f:id:mecobalamin:20210628112648p:plain



アクションは以下のように使った
f:id:mecobalamin:20210628105215p:plain
f:id:mecobalamin:20210628105239p:plain
f:id:mecobalamin:20210628105255p:plain
f:id:mecobalamin:20210628105322p:plain
f:id:mecobalamin:20210628105334p:plain
f:id:mecobalamin:20210628105354p:plain
f:id:mecobalamin:20210628105408p:plain

使用したjsonファイルは以下の通り
pokemon.json

{
  "ノーマル": {
    "攻撃": {
      "こうかばつぐん":["なし"],
      "こうかいまひとつ":["いわ", "はがね"],
      "こうかなし":["ゴースト"]
    },
    "防御": {
      "こうかばつぐん":["かくとう"],
      "こうかいまひとつ":["なし"],
      "こうかなし":["ゴースト"]
    }
  },
  "ほのお": {
    "攻撃": {
      "こうかばつぐん":["くさ", "こおり", "むし", "はがね"],
      "こうかいまひとつ":["ほのお", "みず", "いわ", "ドラゴン"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["みず", "じめん", "いわ"],
      "こうかいまひとつ":["ほのお", "くさ", "こおり", "むし", "はがね", "フェアリー"],
      "こうかなし":["なし"]
    }
  },
  "みず": {
    "攻撃": {
      "こうかばつぐん":["ほのお", "じめん", "いわ"],
      "こうかいまひとつ":["みず", "くさ", "ドラゴン"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["でんき", "くさ"],
      "こうかいまひとつ":["ほのお", "みず", "こおり", "はがね"],
      "こうかなし":["なし"]
    }
  },
  "くさ": {
    "攻撃": {
      "こうかばつぐん":["みず", "じめん", "いわ"],
      "こうかいまひとつ":["ほのお", "くさ", "どく", "ひこう", "むし", "ドラゴン", "はがね"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["ほのお", "こおり", "どく", "ひこう", "むし"],
      "こうかいまひとつ":["みず", "でんき", "くさ", "じめん"],
      "こうかなし":["なし"]
    }
  },
  "でんき": {
    "攻撃": {
      "こうかばつぐん":["みず", "ひこう"],
      "こうかいまひとつ":["でんき", "くさ", "ドラゴン"],
      "こうかなし":["じめん"]
    },
    "防御": {
      "こうかばつぐん":["じめん"],
      "こうかいまひとつ":["でんき", "ひこう", "はがね"],
      "こうかなし":["なし"]
    }
  },
  "こおり": {
    "攻撃": {
      "こうかばつぐん":["くさ", "じめん", "ひこう", "ドラゴン"],
      "こうかいまひとつ":["ほのお", "みず", "こおり", "はがね"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["ほのお", "かくとう", "いわ", "はがね"],
      "こうかいまひとつ":["こおり"],
      "こうかなし":["なし"]
    }
  },
  "かくとう": {
    "攻撃": {
      "こうかばつぐん":["ノーマル", "こおり", "いわ", "あく", "はがね"],
      "こうかいまひとつ":["どく", "ひこう", "エスパー", "むし", "フェアリー"],
      "こうかなし":["ゴースト"]
    },
    "防御": {
      "こうかばつぐん":["ひこう", "エスパー", "フェアリー"],
      "こうかいまひとつ":["むし", "いわ", "あく"],
      "こうかなし":["ゴースト"]
    }
  },
  "どく": {
    "攻撃": {
      "こうかばつぐん":["くさ", "フェアリー"],
      "こうかいまひとつ":["どく", "じめん", "いわ", "ゴースト"],
      "こうかなし":["はがね"]
    },
    "防御": {
      "こうかばつぐん":["じめん", "エスパー"],
      "こうかいまひとつ":["くさ", "かくとう", "どく", "むし", "フェアリー"],
      "こうかなし":["なし"]
    }
  },
  "じめん": {
    "攻撃": {
      "こうかばつぐん":["ほのお", "でんき", "どく", "いわ", "はがね"],
      "こうかいまひとつ":["くさ", "むし"],
      "こうかなし":["ひこう"]
    },
    "防御": {
      "こうかばつぐん":["みず", "じめん", "こおり"],
      "こうかいまひとつ":["どく", "いわ"],
      "こうかなし":["でんき"]
    }
  },
  "ひこう": {
    "攻撃": {
      "こうかばつぐん":["Glound", "かくとう", "むし"],
      "こうかいまひとつ":["でんき", "いわ", "はがね"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["でんき", "こおり", "いわ"],
      "こうかいまひとつ":["くさ", "かくとう", "むし"],
      "こうかなし":["じめん"]
    }
  },
  "エスパー": {
    "攻撃": {
      "こうかばつぐん":["かくとう", "どく"],
      "こうかいまひとつ":["エスパー", "はがね"],
      "こうかなし":["ゴースト"]
    },
    "防御": {
      "こうかばつぐん":["むし", "ゴースト", "あく"],
      "こうかいまひとつ":["かくとう", "エスパー"],
      "こうかなし":["なし"]
    }
  },
  "むし": {
    "攻撃": {
      "こうかばつぐん":["くさ", "エスパー", "ゴースト"],
      "こうかいまひとつ":["ほのお", "かくとう", "どく", "ひこう", "ゴースト", "はがね", "フェアリー"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["ほのお", "ひこう", "いわ"],
      "こうかいまひとつ":["くさ", "かくとう", "じめん"],
      "こうかなし":["なし"]
    }
  },
  "いわ": {
    "攻撃": {
      "こうかばつぐん":["ほのお", "こおり", "ひこう", "むし"],
      "こうかいまひとつ":["かくとう", "じめん", "はがね"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["みず", "くさ", "かくとう", "じめん", "はがね"],
      "こうかいまひとつ":["ノーマル", "ほのお", "どく", "ひこう"],
      "こうかなし":["なし"]
    }
  },
  "ゴースト": {
    "攻撃": {
      "こうかばつぐん":["エスパー", "ゴースト"],
      "こうかいまひとつ":["あく"],
      "こうかなし":["ノーマル"]
    },
    "防御": {
      "こうかばつぐん":["ゴースト", "あく"],
      "こうかいまひとつ":["どく", "むし"],
      "こうかなし":["ノーマル", "かくとう"]
    }
  },
  "ドラゴン": {
    "攻撃": {
      "こうかばつぐん":["ドラゴン"],
      "こうかいまひとつ":["はがね"],
      "こうかなし":["フェアリー"]
    },
    "防御": {
      "こうかばつぐん":["こおり", "ドラゴン", "フェアリー"],
      "こうかいまひとつ":["ほのお", "みず", "でんき", "くさ"],
      "こうかなし":["なし"]
    }
  },
  "あく": {
    "攻撃": {
      "こうかばつぐん":["エスパー", "ゴースト"],
      "こうかいまひとつ":["かくとう", "あく", "フェアリー"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["かくとう", "むし", "フェアリー"],
      "こうかいまひとつ":["ゴースト", "あく"],
      "こうかなし":["エスパー"]
    }
  },
  "はがね": {
    "攻撃": {
      "こうかばつぐん":["こおり", "いわ", "フェアリー"],
      "こうかいまひとつ":["ほのお", "みず", "でんき", "はがね"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["ほのお", "かくとう", "じめん"],
      "こうかいまひとつ":["ノーマル", "くさ", "こおり", "ひこう", "エスパー", "むし", "いわ", "ドラゴン", "はがね", "フェアリー"],
      "こうかなし":["どく"]
    }
  },
  "フェアリー": {
    "攻撃": {
      "こうかばつぐん":["かくとう", "ドラゴン", "あく"],
      "こうかいまひとつ":["ほのお", "どく", "はがね"],
      "こうかなし":["なし"]
    },
    "防御": {
      "こうかばつぐん":["どく", "はがね"],
      "こうかいまひとつ":["かくとう", "むし", "あく"],
      "こうかなし":["ドラゴン"]
    }
  }
}