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でも良いんじゃないのかな?