Apple サポート App および YouTube チャンネルのお知らせ

*  iOS 向け Apple サポート App のバージョン 5.6 が公開されました。

YouTube - Apple Japan チャンネルで有用なヒントや使い方を配信中です。

コミュニティでの投票について

コミュニティでの投票について解説した記事を公開しました。

Apple Account (Apple ID) の不正利用を確認する方法

Apple Account に関するよくある質問についてはこちらのページを、また不正利用を確認する方法についてはこちらのドキュメントをご参照ください。

macOS Sequoia - ショートカットで json ファイルを保存するときに発生する不明なエラー

jsonで書かれたリストに名前を設定して保存しようとすると、「ショートカットの実行に問題がありました。」という不明なエラーが発生します。

名前を設定せずに、サブパスにtest/test.jsonを指定すると、実際にはtest.txtで保存されてしまいます。

これはShortcuts自体のエラーですか?それとも解決方法がありますか?


* タイトルを変更しました。 Apple Inc.

MacBook Pro 13″

投稿日 2024/10/09 02:10

返信
スレッドに付いたマーク ランキングトップの返信

投稿日 2024/10/09 18:40

当方でも同様の結果となりました。名前を設定した場合、拡張子名が txt や xml だと保存されますが、json はなぜかダメ。代わりの手段としてシェルスクリプトで保存しようとしたら Shortcuts.app がクラッシュ...。


また、名前を設定せずにサブパスを指定すると拡張子名が強制的に txt になるのも確認できました。アクションの説明に記載がないので何とも言えませんが、これは仕様かもしれません。


JSON 文字列の保存不可問題と、サブパス指定で txt しか指定できない問題を Apple にフィードバックしてはどうでしょうか。


で、当面はこんな感じで JavaScript for Automation で保存してみるとか。fname と dname のところは適宜書き換えてください。



JavaScript for Automation のコード

'use strict';

function run(argv) {
    const string = $(argv[0].toString());

    const fname = $('test.json');
    const dname = $('~/Desktop/dir').stringByExpandingTildeInPath;
    const fpath = dname.stringByAppendingPathComponent(fname);

    const data = string.dataUsingEncoding($.NSUTF8StringEncoding);

    const err = $();
    const opts = $.NSDataWritingAtomic;

    if (! data.writeToFileOptionsError(fpath, opts, err)) {
        throw new Error(err.localizedDescription.js);
    }
}


# 動作確認: Parallels Desktop 18 上の Sequoia 15.0.1


# スクリーンショットを追加しました


返信: 4
スレッドに付いたマーク ランキングトップの返信

2024/10/09 18:40 oreoon への返信

当方でも同様の結果となりました。名前を設定した場合、拡張子名が txt や xml だと保存されますが、json はなぜかダメ。代わりの手段としてシェルスクリプトで保存しようとしたら Shortcuts.app がクラッシュ...。


また、名前を設定せずにサブパスを指定すると拡張子名が強制的に txt になるのも確認できました。アクションの説明に記載がないので何とも言えませんが、これは仕様かもしれません。


JSON 文字列の保存不可問題と、サブパス指定で txt しか指定できない問題を Apple にフィードバックしてはどうでしょうか。


で、当面はこんな感じで JavaScript for Automation で保存してみるとか。fname と dname のところは適宜書き換えてください。



JavaScript for Automation のコード

'use strict';

function run(argv) {
    const string = $(argv[0].toString());

    const fname = $('test.json');
    const dname = $('~/Desktop/dir').stringByExpandingTildeInPath;
    const fpath = dname.stringByAppendingPathComponent(fname);

    const data = string.dataUsingEncoding($.NSUTF8StringEncoding);

    const err = $();
    const opts = $.NSDataWritingAtomic;

    if (! data.writeToFileOptionsError(fpath, opts, err)) {
        throw new Error(err.localizedDescription.js);
    }
}


# 動作確認: Parallels Desktop 18 上の Sequoia 15.0.1


# スクリーンショットを追加しました


2024/10/09 21:59 Hiro__S への返信

前掲のスクリプトは保存先のフォルダが存在することが条件です。保存先のフォルダがない場合は作成、、、ということであればこんな感じでしょうか。


'use strict';

function mkdirp(dir) {
    const filemanager = $.NSFileManager.defaultManager;
    const isdir = Ref();
    if (! filemanager.fileExistsAtPathIsDirectory(dir, isdir) || ! isdir[0]) {
        const err = $();
        if (! filemanager.createDirectoryAtPathWithIntermediateDirectoriesAttributesError(dir, true, $(), err)) {
            throw new Error(err.localizedDescription.js);
        }
    }
}

function run(argv) {
    const string = $(argv[0].toString());

    const fname = $('test.json');
    const dname = $('~/Desktop/dir').stringByExpandingTildeInPath;
    const fpath = dname.stringByAppendingPathComponent(fname);

    const data = string.dataUsingEncoding($.NSUTF8StringEncoding);
    const err = $();
    const opts = $.NSDataWritingAtomic;

    mkdirp(dname);

    if (! data.writeToFileOptionsError(fpath, opts, err)) {
        throw new Error(err.localizedDescription.js);
    }
}


2024/10/09 23:00 Hiro__S への返信

ご回答ありがとうございます。

また、JSの提供もありがとうございました。


色々試してみた結果、クラッシュの主な原因はリスト型であることが、一つの問題だと分かりました。

画像のように、辞書型にしてみたところ、クラッシュは無くなりました。

しかし、依然としてサブパスにtest/test.jsonを指定しても、名前をtest.jsonにしても実行結果はtest.txtで保存されます。


リスト型でtest.txtをリネームしてtest.jsonにしようとすると、クラッシュしますが、辞書型でtest.txtをリネームしてtest.jsonにしようとすると問題なく実行できました。


対策を考えてくださりありがとうございました。

また、このままでは不便なので、ご紹介いただいたフィードバックにも連絡しようと思います。

(フィードバックにShortcuts項目がないのが残念です…)

macOS Sequoia - ショートカットで json ファイルを保存するときに発生する不明なエラー

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。