概要
ファイル内のJSON配列を逆転させ、別ファイルに出力するPowerShellスクリプトを作ってみました。ポイントは、PowerShellのJSON関連コマンドレットとUnicodeエスケープに対する処理でしょうか。
スクリプト
Param([string]$from, [string]$to)
$data = (Get-Content $from -Raw -Encoding UTF8 | ConvertFrom-Json)
$data = $data[($data.length-1)..0]
[Regex]::Unescape((ConvertTo-Json $data)) | Set-Content -Path $to -Encoding UTF8
使い方
PS > Reverse-JsonArray.ps1 -from input.json -to output.json
入出力共にUTF8に設定してあるので、他のエンコーディングを利用する場合はその辺いじってくださいな。
入力例
[
    {
        "group": 1,
        "leader": "souji",
        "leader_jp": "総司"
    },
    {
        "group": 2,
        "leader": "shinpachi",
        "leader_jp": "新八"
    },
    {
        "group": 3,
        "leader": "hajime",
        "leader_jp": "一"
    },
    {
        "group": 4,
        "leader": "chuji",
        "leader_jp": "忠司"
    },
    {
        "group": 5,
        "leader": "kanryusai",
        "leader_jp": "観柳斎"
    },
    {
        "group": 6,
        "leader": "genzaburo",
        "leader_jp": "源三郎"
    },
    {
        "group": 7,
        "leader": "sanjuro",
        "leader_jp": "三十郎"
    },
    {
        "group": 8,
        "leader": "heisuke",
        "leader_jp": "平助"
    },
    {
        "group": 9,
        "leader": "mikisaburo",
        "leader_jp": "三樹三郎"
    },
    {
        "group": 10,
        "leader": "sanosuke",
        "leader_jp": "左之助"
    },
    {
        "memo": "<>&#/,."
    }
]
出力
[
    {
        "memo":  "<>&#/,."
    },
    {
        "group":  10,
        "leader":  "sanosuke",
        "leader_jp":  "左之助"
    },
    {
        "group":  9,
        "leader":  "mikisaburo",
        "leader_jp":  "三樹三郎"
    },
    {
        "group":  8,
        "leader":  "heisuke",
        "leader_jp":  "平助"
    },
    {
        "group":  7,
        "leader":  "sanjuro",
        "leader_jp":  "三十郎"
    },
    {
        "group":  6,
        "leader":  "genzaburo",
        "leader_jp":  "源三郎"
    },
    {
        "group":  5,
        "leader":  "kanryusai",
        "leader_jp":  "観柳斎"
    },
    {
        "group":  4,
        "leader":  "chuji",
        "leader_jp":  "忠司"
    },
    {
        "group":  3,
        "leader":  "hajime",
        "leader_jp":  "一"
    },
    {
        "group":  2,
        "leader":  "shinpachi",
        "leader_jp":  "新八"
    },
    {
        "group":  1,
        "leader":  "souji",
        "leader_jp":  "総司"
    }
]
解説
PowerShellのJSON関連コマンドレットが便利、ということで作ってみました。ConvertFrom-JsonやConvertTo-JsonでJSON<->オブジェクト変換が一発でできるのは(・∀・)イイネ!!
ちなみに、最後の行で.NETライブラリのRegex.Unescapeを使っていますが、これがないとmemoの値がこんな↓になってしまいます。
    {
        "memo":  "\u003c\u003e\u0026#/,."
    }
こんな具合に、一部の記号がUnicodeエスケープされて出力されます。出力後のJSONを純粋にデータとして扱う場合、むしろこちらの方がセキュリティ面から考えるといいと思います。が、自分の場合は出力後のJSONを人が読めるものにする必要があったため、Unicodeエスケープを解除しています。