LoginSignup
1
0

More than 5 years have passed since last update.

PowerShellでJSON配列を逆転させる

Posted at

概要

ファイル内のJSON配列を逆転させ、別ファイルに出力するPowerShellスクリプトを作ってみました。ポイントは、PowerShellのJSON関連コマンドレットとUnicodeエスケープに対する処理でしょうか。

スクリプト

Reverse-JsonArray.ps1
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に設定してあるので、他のエンコーディングを利用する場合はその辺いじってくださいな。

入力例

input.json
[
    {
        "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": "<>&#/,."
    }
]

出力

output.json
[
    {
        "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エスケープを解除しています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0