WinMergeでJsonデータを比較する方法

未分類
スポンサーリンク

前置き

Windows比較ツールのWinMergeを使用すれば、テキストの比較がとても簡単にできて便利ですよね。
ただ、インデントされてない平テキスト(1行)になってるJsonファイルを比較するとどうでしょう。

差分が全く分からないですね。

比較前にjsonの成形ツールなどでインデントしなおしてから比較すれば一応は解決するとは思いますが、まあ、面倒ですよね汗

これら悩みは「jq」というプラグインをWinMergeに取り込めば解決できます!
以下では導入手順と、実際に比較するまでの方法を簡単 + 丁寧に展開していきます。

jqプラグインの導入

以下サイトからjqプラグインをダウンロードできます。

Redirecting to jqlang.github.io

ダウンロードボタン => Windows(64-bit)を選択します。

「jq-win64.exe」という実行ファイルがダウンロードできますので、保存先のフォルダはWinMergeのMergePluginsフォルダに保存します。
WinMergeのフォルダはインストール時に指定した箇所になりますが、自分の場合は以下となってます。

C:\Applications\WinMerge\MergePlugins

保存後の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="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$;\.dat$"
End Function

Function get_PluginIsAutomatic()
    get_PluginIsAutomatic = True
End Function

Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode)
    Dim shell
    Dim command
    Dim jqPath
    jqPath = "C:\Applications\WinMerge\MergePlugins\jq-win64.exe"
    Set shell = CreateObject("WScript.Shell")
    command = "cmd /c type """ & fileSrc & """ | """ & jqPath & """ > """ & fileDst & """"
    shell.Run command, 0, true
    pbChanged = True
    pSubcode = 0
    UnpackFile = True
End Function

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

</script>
</scriptlet>

基本、コピペで問題ありませんが、jqPath箇所をjqプラグの実行ファイルをダウンロードしたPATHに差し替えてください。

jqPath = "C:\Applications\WinMerge\MergePlugins\jq-win64.exe"

また、文字コードはSJISにします。

このファイルも「jq-win64.exe」実行ファイルと同じWinMergeのMergePluginsフォルダに保存します。

保存後のMergePluginsフォルダは以下のような状態です。

WinMergeの設定

まずWinMergeを開き、比較したいファイルをそれぞれ指定します。

次に、上部メニューの「プラグイン」=>「展開プラグインで開く」をクリックします。

以下のメニューが立ち上がりますので、「ファイル展開プラグイン」を「CompareJsonFiles.sct」に指定してOKを選択します。

すると、インデントされて差分が一目瞭然の状態となります!

以上となります。

タイトルとURLをコピーしました