⚡ Format-JSONFilesToSingleLine

Format-JSONFilesToSingleLine


jqユーティリティを使用してJSONファイルを単一行形式にフォーマットします。

<#
.SYNOPSIS
    jqユーティリティを使用してJSONファイルを単一行形式にフォーマットします。

.DESCRIPTION
    このスクリプトには2つの関数が含まれています:Format-JSONFilesToSingleLineとFormat-JSONFileToSingleLine。
    Format-JSONFilesToSingleLine関数はパスを入力として受け取り、単一のファイルまたはディレクトリ内のすべてのJSONファイルを処理して単一行形式に変換します。
    Format-JSONFileToSingleLine関数は単一のJSONファイルを単一行形式にフォーマットします。

.PARAMETER Path
    フォーマットするJSONファイルまたはJSONファイルを含むディレクトリへのパスを指定します。

.EXAMPLE
    Format-JSONFilesToSingleLine -Path "C:\path\to\your\directory"
    指定されたディレクトリ内のすべてのJSONファイルを単一行形式にフォーマットします。

.EXAMPLE
    Format-JSONFileToSingleLine -FilePath "C:\path\to\your\file.json"
    指定されたJSONファイルを単一行形式にフォーマットします。

.NOTES
    - jqユーティリティがインストールされ、システムPATHに追加されている必要があります。
    - 元のJSONファイルを単一行形式にフォーマットされたバージョンで上書きします。
    - jqユーティリティがインストールされていない場合、スクリプトはエラーメッセージを表示して終了します。
    - 指定されたファイルまたはディレクトリが存在しない場合、スクリプトはエラーメッセージを表示します。

    作成者: _ka_de
    作成日: 2024-04-20
    バージョン: 1.0
#>

function Format-JSONFilesToSingleLine {
    param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [string]$Path
    )

    process {
        if (Test-Path $Path -PathType Container) {
            # パスがディレクトリの場合、ディレクトリ内のすべてのJSONファイルをフォーマット
            Get-ChildItem -Path $Path -Filter "*.json" | ForEach-Object {
                Format-JSONFileToSingleLine -FilePath $_.FullName
            }
        }
        elseif (Test-Path $Path -PathType Leaf) {
            # パスが単一のファイルの場合、そのファイルをフォーマット
            Format-JSONFileToSingleLine -FilePath $Path
        }
        else {
            Write-Host "無効なパス: $Path"
        }
    }
}

function Format-JSONFileToSingleLine {
    param (
        [Parameter(Mandatory = $true)]
        [string]$FilePath
    )

    # jqがインストールされているか確認
    if (-not (Test-Path "jq")) {
        Write-Host "jqがインストールされていません。jqをインストールし、システムPATHに追加してください。"
        return
    }

    # ファイルが存在するか確認
    if (-not (Test-Path $FilePath -PathType Leaf)) {
        Write-Host "ファイルが見つかりません: $FilePath"
        return
    }

    # jqを使用してJSONファイルを単一行にフォーマットするコマンドを構築
    $command = "jq -c . '$FilePath' > '$FilePath.tmp' && move /Y '$FilePath.tmp' '$FilePath'"

    # コマンドを実行
    Invoke-Expression -Command $command
    Write-Host "$($FilePath)を単一行形式にフォーマットしました。"
}

# 使用例:
# 単一のJSONファイルを単一行形式にフォーマット
# Format-JSONFileToSingleLine -FilePath "C:\path\to\your\file.json"

# ディレクトリ内のすべてのJSONファイルを単一行形式にフォーマット
# Format-JSONFilesToSingleLine -Path "C:\path\to\your\directory"