「IO.Serialize() の JSON を参照する」の版間の差分
ナビゲーションに移動
検索に移動
ページを新規作成 |
空行の除去 |
||
| (2人の利用者による、間の4版が非表示) | |||
| 4行目: | 4行目: | ||
include/IO.js をインクルードしているマクロで使用可。 | include/IO.js をインクルードしているマクロで使用可。 | ||
[[ | ''ref.'' 導入事例として「[[検索ジャンプの include版|ポップアップメニューで検索先にジャンプ]]」「[[ブックマーク一覧ジャンプ#include版|ブックマーク一覧ジャンプ]]」マクロの sukemaru 版(include 版)<br> | ||
※ 複数の設定項目(変数)をポップアップメニュー内から変更、JSON の参照・初期化などができるようになっています。 | |||
== 使い方 == | == 使い方 == | ||
IO.Serialize() での '''JSON ファイル名(ベース名)の既定値'''は | |||
IO.Serialize() での JSON | <syntaxhighlight lang="javascript"> | ||
< | |||
#include "include/IO.js" | #include "include/IO.js" | ||
| 19行目: | 19行目: | ||
// IO.Seialize( object, jsonName ); // object は任意のオブジェクト | // IO.Seialize( object, jsonName ); // object は任意のオブジェクト | ||
</ | </syntaxhighlight> | ||
※ IO.Seialize() で第二引数を省略した場合は、関数側で定義された既定値 ScriptName.replace( /\.js$/i, "" ) が JSON ファイル名になる(マクロの JS ファイルのベース名と同一になる)。<br> イベントマクロで IO.Seialize() を使用する場合は、ScriptName を使わず、任意の文字列を指定すること。 | |||
;保存先のフォルダパスは JsonDir() 関数で取得する | ;保存先のフォルダパスは JsonDir() 関数で取得する | ||
< | <syntaxhighlight lang="javascript"> | ||
var jsonDir = JsonDir(); | var jsonDir = JsonDir(); | ||
Alert( "jsonDir:\n\n" + jsonDir ); | Alert( "jsonDir:\n\n" + jsonDir ); | ||
</ | </syntaxhighlight> | ||
;JSON ファイルのフルパスは | ;JSON ファイルのフルパスは | ||
< | <syntaxhighlight lang="javascript"> | ||
var jsonPath = jsonDir + "\\" + jsonName + ".json"; | var jsonPath = jsonDir + "\\" + jsonName + ".json"; | ||
// または | // または | ||
| 37行目: | 36行目: | ||
Alert( "jsonPath:\n\n"" + jsonPath ); | Alert( "jsonPath:\n\n"" + jsonPath ); | ||
</ | </syntaxhighlight> | ||
;JSON の内容を確認ダイアログに表示してから JSON ファイルを開く | ;JSON の内容を確認ダイアログに表示してから JSON ファイルを開く | ||
< | <syntaxhighlight lang="javascript"> | ||
// 開く前に最新の状態に JSON を更新するなら関数コード内の object は任意のものに変更すること | // 開く前に最新の状態に JSON を更新するなら関数コード内の object は任意のものに変更すること | ||
OpenJson( jsonName ); // 引数は JSON のファイル名(ベース名) | OpenJson( jsonName ); // 引数は JSON のファイル名(ベース名) | ||
</ | </syntaxhighlight> | ||
[[ファイル:Mery 関数 JsonContents.png|link=]] | |||
<br clear=all> | |||
※ JSON では「キー」(オブジェクトのプロパティ名)の側にも '''"'''ダブルクオート'''"''' が付く。 | |||
== 組み込み関数 JsonDir() == | == 組み込み関数 JsonDir() == | ||
< | <syntaxhighlight lang="javascript"> | ||
/** | /** | ||
* 関数 JsonDir() | * 関数 JsonDir() | ||
| 70行目: | 71行目: | ||
return jsonDir; | return jsonDir; | ||
} | } | ||
</ | </syntaxhighlight> | ||
== 組み込み関数 OpenJson() == | == 組み込み関数 OpenJson() == | ||
OpenJson() を使用するには JsonDir() と JsonContents() も必要。<br> | |||
JSON.stringify() だと Windows XP では使えないので、整形は簡易的な置換処理(ダイアログ窓のコンソールフォントでの読みやすさを優先して{}を全角にする。入れ子になった要素の字下げ数を考慮しない)。 | |||
<syntaxhighlight lang="javascript"> | |||
< | |||
/** | /** | ||
* 関数 OpenJson( jsonName ) | * 関数 OpenJson( jsonName ) | ||
| 120行目: | 121行目: | ||
var contents = ( jsonPath + " \n" | var contents = ( jsonPath + " \n" | ||
+ IO.LoadFromFile( jsonPath ) | + IO.LoadFromFile( jsonPath ) | ||
.replace( /^\{/, "\n{\ | .replace( /^\{/, "\n{\n " ) | ||
.replace( /\}$/g, "\n}\n\n" ) | .replace( /\}$/g, "\n}\n\n" ) | ||
.replace( /,/g, " ,\ | .replace( /,/g, " ,\n " ) | ||
.replace( /\":/g, "\": | .replace( /\":/g, "\": " ) | ||
); | ); | ||
if ( bool ) { | if ( bool ) { | ||
| 143行目: | 144行目: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
2024年9月9日 (月) 11:32時点における最新版
- IO.Serialize() の JSON 参照用関数
includeライブラリ の IO.Serialize() メソッドで書き出した JSON ファイルをを、本体のマクロから参照するための関数。
include/IO.js をインクルードしているマクロで使用可。
ref. 導入事例として「ポップアップメニューで検索先にジャンプ」「ブックマーク一覧ジャンプ」マクロの sukemaru 版(include 版)
※ 複数の設定項目(変数)をポップアップメニュー内から変更、JSON の参照・初期化などができるようになっています。
使い方[編集]
IO.Serialize() での JSON ファイル名(ベース名)の既定値は
#include "include/IO.js"
var jsonName = ScriptName.replace( /\.js$/i, "" );
// jsonName = "検索ジャンプ"; // 任意の名前でもよい
Alert( "jsonName: " + jsonName );
// IO.Seialize( object, jsonName ); // object は任意のオブジェクト
※ IO.Seialize() で第二引数を省略した場合は、関数側で定義された既定値 ScriptName.replace( /\.js$/i, "" ) が JSON ファイル名になる(マクロの JS ファイルのベース名と同一になる)。
イベントマクロで IO.Seialize() を使用する場合は、ScriptName を使わず、任意の文字列を指定すること。
- 保存先のフォルダパスは JsonDir() 関数で取得する
var jsonDir = JsonDir();
Alert( "jsonDir:\n\n" + jsonDir );
- JSON ファイルのフルパスは
var jsonPath = jsonDir + "\\" + jsonName + ".json";
// または
var jsonPath = IO.Path.Add( jsonDir, jsonName + ".json" );
Alert( "jsonPath:\n\n"" + jsonPath );
- JSON の内容を確認ダイアログに表示してから JSON ファイルを開く
// 開く前に最新の状態に JSON を更新するなら関数コード内の object は任意のものに変更すること
OpenJson( jsonName ); // 引数は JSON のファイル名(ベース名)
※ JSON では「キー」(オブジェクトのプロパティ名)の側にも "ダブルクオート" が付く。
組み込み関数 JsonDir()[編集]
/**
* 関数 JsonDir()
* JSON ファイルの親フォルダのパス
* (IO.Serialize() での保存先フォルダのパス)
*
* ポータブル版かインストーラ版かを Mery.ini の実在確認で判別する
*/
function JsonDir() {
var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
var jsonDir;
if ( Fso.FileExists( editor.FullName.replace( /\.exe$/i, ".ini" ) ) ) {
jsonDir = editor.FullName.replace( /Mery\.exe$/i, "" )
+ "Macros\\MacroSettings";
}
else {
var WshShell = new ActiveXObject( "WScript.Shell" );
jsonDir = WshShell.ExpandEnvironmentStrings( "%APPDATA%" )
+ "\\Mery\\MacroSettings";
}
return jsonDir;
}
組み込み関数 OpenJson()[編集]
OpenJson() を使用するには JsonDir() と JsonContents() も必要。
JSON.stringify() だと Windows XP では使えないので、整形は簡易的な置換処理(ダイアログ窓のコンソールフォントでの読みやすさを優先して{}を全角にする。入れ子になった要素の字下げ数を考慮しない)。
/**
* 関数 OpenJson( jsonName )
* JSON ファイルを開く
*
* 引数は JSON ファイルのベース名
*/
function OpenJson( jsonName ) {
var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
var jsonName = jsonName || ScriptName.replace( /\.js$/i, "" );
var jsonDir = JsonDir();
var jsonPath = jsonDir + "\\" + jsonName + ".json";
// 開く前に最新の状態に更新するなら(object は任意のものに変更すること)
// IO.Serialize( object, jsonName );
// Sleep( 500 );
if ( Fso.FileExists( jsonPath )
&& JsonContents( jsonPath ).length ) {
var confirmStr = "設定ファイルは正常です \n\n"
+ JsonContents( jsonPath )
+ "設定ファイルを開きますか? ";
if ( Confirm( confirmStr ) ) {
var WshShell = new ActiveXObject( "WScript.Shell" );
WshShell.Run( '"' + editor.FullName
+ '" "' + jsonPath + '"' );
}
}
else {
Alert( "設定ファイルがありません \n"
+ jsonDir + " " );
}
}
/**
* 関数 JsonContents( jsonPath [, bool] )
* JSON ファイルの文字列をメッセージボックス用に整形する
*
* 第1引数は JSON ファイルのパス
* 第2引数は真偽値(省略可)
* true なら \uHHHH をデコードする
*/
function JsonContents( jsonPath, bool ) {
var contents = ( jsonPath + " \n"
+ IO.LoadFromFile( jsonPath )
.replace( /^\{/, "\n{\n " )
.replace( /\}$/g, "\n}\n\n" )
.replace( /,/g, " ,\n " )
.replace( /\":/g, "\": " )
);
if ( bool ) {
// 「テキスト整形」マクロより >> 符号化/復号化 >> \uHHHH デコード
var Decode_uHHHH = function( str ) {
return str.replace( /\\u([0-9A-Fa-f]{4})/g, function( s, n ) {
return String.fromCharCode( Number( "0x" + n ) )
} )
};
return Decode_uHHHH( contents );
}
else {
// 半角アルファベットの小文字を全角にするなら
// contents = contents.replace( /[a-z]/g,
// function( $0 ) {
// return String.fromCharCode( $0.charCodeAt( 0 ) + 0xFEE0 )
// } )
return contents;
}
}
スポンサーリンク