ショートカットでデータを扱うのにplistとJSONのどちらも使えることはこのブログで何度か触れた通りです.
今回は別々に存在するplistとJSONを一つの「辞書」として扱えないか…というお話.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS14.4.1
スポンサーリンク
ダメな例
まずはダメだった例です.
「テキスト」アクションにJSONでデータを適当に書いておきます.
続けて別のデータをplist形式で書きます.
plistとJSONでは後者に合わせるのがやりやすいため, 「入力から辞書を取得」アクションでJSONに変換します.
念の為これを「結果を表示」で確認します.
この二つの「辞書」をテキストアクションに並べます.
これを「結果を表示」で表示した結果は
{"・":・,~}{"・":・,~}
という形になっているはずです(…と思いたいです).
実際にレシピを起動すると画像の通りです.
「入力から辞書を取得」の結果を「結果を表示」で表示させた場合はちゃんとJSONでの表記になっているにもかかわらず, 「テキスト」アクションで繋げた結果はplistの記述そのままになってしまいました.
属性を「テキスト」などに変更しても当然解決しません.
解決策
現状でこれを回避するためにはクリップボードを利用します.
画像のように, 前回は辞書の結果とJSONを並べていた代わりに, 辞書をクリップボードにコピーした結果とJSONを並べます.
これで実行すると想像通りの結果になりました.
ただこのままだと辞書(JSON)同士の間にある不要な括弧に加え, 必要なカンマがありません.
また妥協案としてクリップボードを利用したので念の為その対策も行いたいところです.
解決策を取り入れたレシピ
というわけで上記のアイデアを採用してレシピを作り直します.
まず初めにレシピを起動させた時点でのクリップボードを取得することでショートカットのマジック変数に退避させます.
次に前回と同じくJSONでのデータ.
更に同じくplist形式のデータを書き, これを「入力から辞書を取得」で辞書に.
そしてこの結果をクリップボードにコピーします.
クリップボードにコピーした辞書とJSONを並べます, 順番はどちらでもOKです.
先に書いた通り, このままではJSONを繋げただけなので間の括弧が不要なのと代わりにカンマが必要なので「テキストを置き換え」で}{を,に置き換えます.
これで理屈の上ではJSONとplistが一つのJSONになったはずです.
JSON一つ分となったはずのテキストを辞書化し, 今回はとりあえずすべてのキーを取得してそれを「リストから選択」で正しく処理できているかを確認します.
最後に, 最初に退避させておいたクリップボードを改めてコピーすることで復帰します.
まずはマージさせた時点.
ちゃんとJSONでひと繋がりになっていますね.
「リストから選択」も想定通りです.
もちろん対応する値も取り出せます.
〆
なぜ単純に並べるのはダメなのかは不明です.
もっとエレガントなやり方があるんでしょうかね.
このアイデアをUSLauncherに使うことでデータファイルを軽くしよう…と思ったんですが, 却って重くなってしまう上にコピーライトのような特殊文字の扱いが不明のため断念しました.
物事は簡単にいかないですねぇ…