So-net無料ブログ作成

WinMergeのJSONプラグインを作成してみた [その他]

JSONファイルが何かと便利!と色々使ってみてるけど、
元データとの比較が面倒だったりしたのでWinMergeのJSONプラグインを作成したときのメモ。

JSONファイルを整形して比較する。
整形には、JavaScriptのJSONを使用する。
WinMergeのプラグインは、VBScriptで作成されている。
WinMergeのプラグインで、JavaScriptは動くのか?(動いた!)
でも、JSONを使用すると「'JSON' は宣言されていません」と出る。
json2.jsを使用すれば出来た!

json2.js
https://github.com/douglascrockford/JSON-js

作成したプラグインと、json2.jsをMergePluginsフォルダに入れます。

ファイル名:CompareJsonFiles.sct
<scriptlet>

<implements type="Automation" id="dispatcher">
	<property name="PluginEvent">
		<get/>
	</property>
	<property name="PluginDescription">
		<get/>
	</property>
	<property name="PluginFileFilters">
		<get/>
	</property>
	<property name="PluginIsAutomatic">
		<get/>
	</property>
	<method name="UnpackFile"/>
	<method name="PackFile"/>
</implements>

<script language="JavaScript" src="json2.js"></script>
<script language="JavaScript">
function getJson(filename) {
	return jsonParse(adoLoadText(filename, "utf-8"));
}
function jsonParse(text) {
	try {
		var obj = JSON.parse(text); 
		return JSON.stringify(obj, null, "    ");
	} catch(e) {
		return e.message;
	}
}
function adoLoadText(filename, charset) {
	var stream, text;
	stream = new ActiveXObject("ADODB.Stream");
	stream.type = 2;
	stream.charset = charset;
	stream.open();
	stream.loadFromFile(filename);
	text = stream.readText(-1);
	stream.close();
	return text;
}
</script>

<script language="VBS">

Option Explicit

Function get_PluginEvent()
	get_PluginEvent = "FILE_PACK_UNPACK"
End Function

Function get_PluginDescription()
	get_PluginDescription = "Json形式のファイルを整形し比較をする。"
End Function

Function get_PluginFileFilters()
	get_PluginFileFilters = "\.json$"
End Function

Function get_PluginIsAutomatic()
	get_PluginIsAutomatic = True
End Function

Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode)
	Dim fso
	Dim foDst
	
	Set fso = CreateObject("Scripting.FileSystemObject")
	
	Set foDst = fso.OpenTextFile(fileDst, 2, True)
	foDst.Write(getJson(fileSrc))
	foDst.Close
	
	Set foDst = Nothing
	Set fso = Nothing
	
	pbChanged = True
	pSubcode = 0
	UnpackFile = True
End Function

Function PackFile(fileSrc, fileDst, pbChanged, pSubcode)
	PackFile = False
End Function

</script>
</scriptlet>


WinMergeのプラグインは、JavaScriptでも良いんじゃないのかな?
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0