다음을 통해 공유


ConvertFrom-Json

JSON 형식 문자열을 사용자 지정 개체 또는 해시 테이블로 변환합니다.

구문

ConvertFrom-Json
                [-InputObject] <String>
                [-AsHashtable]
                [-DateKind <JsonDateKind>]
                [-Depth <Int32>]
                [-NoEnumerate]
                [<CommonParameters>]

Description

ConvertFrom-Json cmdlet은 JSON(JavaScript Object Notation) 형식 문자열을 JSON 문자열의 각 필드에 대한 속성이 있는 사용자 지정 PSObject 또는 Hashtable 개체로 변환합니다. JSON은 일반적으로 웹 사이트에서 개체의 텍스트 표현을 제공하는 데 사용됩니다. cmdlet은 JSON 문자열의 각 줄을 처리할 때 새 개체에 속성을 추가합니다.

JSON 표준에서는 중복 키 이름을 허용하지만, PSObject해시 테이블 형식에서는 금지됩니다. 예를 들어 JSON 문자열에 중복 키가 포함된 경우 이 cmdlet에서 마지막 키만 사용됩니다. 아래의 다른 예제를 참조하세요.

모든 개체에서 JSON 문자열을 생성하려면 ConvertTo-Json cmdlet을 사용합니다.

이 cmdlet은 PowerShell 3.0에서 도입되었습니다.

메모

Windows PowerShell 5.1에서 ConvertFrom-Json JSON 주석이 발견되었을 때 오류를 반환했습니다. PowerShell 6 이상에서 cmdlet은 주석이 있는 JSON을 지원합니다. JSON 주석은 cmdlet에 의해 출력되는 개체에 캡처되지 않습니다. 자세한 내용은 about_Comments 문서의 JSON 주석 섹션을 참조하세요.

예제

예제 1: DateTime 개체를 JSON 개체로 변환

이 명령은 ConvertTo-JsonConvertFrom-Json cmdlet을 사용하여 DateTime 개체를 Get-Date cmdlet에서 JSON 개체로 변환한 다음 PSCustomObject변환합니다.

Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json

DisplayHint : 2
DateTime    : Monday, January 29, 2024 3:10:26 PM
Date        : 1/29/2024 12:00:00 AM
Day         : 29
DayOfWeek   : 1
DayOfYear   : 29
Hour        : 15
Kind        : 2
Millisecond : 931
Microsecond : 47
Nanosecond  : 600
Minute      : 10
Month       : 1
Second      : 26
Ticks       : 638421378269310476
TimeOfDay   : @{Ticks=546269310476; Days=0; Hours=15; Milliseconds=931; Microseconds=47;
              Nanoseconds=600; Minutes=10; Seconds=26; TotalDays=0.632256146384259;
              TotalHours=15.1741475132222; TotalMilliseconds=54626931.0476;
              TotalMicroseconds=54626931047.6; TotalNanoseconds=54626931047600;
              TotalMinutes=910.448850793333; TotalSeconds=54626.9310476}
Year        : 2024

이 예제에서는 Select-Object cmdlet을 사용하여 DateTime 개체의 모든 속성을 가져옵니다. ConvertTo-Json cmdlet을 사용하여 DateTime 개체를 JSON 개체로 형식이 지정된 문자열로 변환하고 ConvertFrom-Json cmdlet을 사용하여 JSON 형식 문자열을 PSCustomObject 개체로 변환합니다.

예제 2: 웹 서비스에서 JSON 문자열을 가져와서 PowerShell 개체로 변환

이 명령은 Invoke-WebRequest cmdlet을 사용하여 웹 서비스에서 JSON 문자열을 가져옵니다. 그런 다음 ConvertFrom-Json cmdlet을 사용하여 JSON 콘텐츠를 PowerShell에서 관리할 수 있는 개체로 변환합니다.

# Ensures that Invoke-WebRequest uses TLS 1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$j = Invoke-WebRequest 'https://api.github.com/repos/PowerShell/PowerShell/issues' |
    ConvertFrom-Json

JSON 콘텐츠를 개체로 자동으로 변환하는 Invoke-RestMethod cmdlet을 사용할 수도 있습니다.

예제 3: JSON 문자열을 사용자 지정 개체로 변환

이 예제에서는 ConvertFrom-Json cmdlet을 사용하여 JSON 파일을 PowerShell 사용자 지정 개체로 변환하는 방법을 보여줍니다.

Get-Content -Raw JsonFile.JSON | ConvertFrom-Json

이 명령은 Get-Content cmdlet을 사용하여 JSON 파일에서 문자열을 가져옵니다. Raw 매개 변수는 전체 파일을 단일 JSON 개체로 반환합니다. 그런 다음 파이프라인 연산자를 사용하여 구분된 문자열을 ConvertFrom-Json cmdlet으로 보내 사용자 지정 개체로 변환합니다.

예제 4: JSON 문자열을 해시 테이블로 변환

이 명령은 -AsHashtable 스위치가 명령의 제한을 극복할 수 있는 예를 보여 줍니다.

'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable

JSON 문자열에는 대/소문자만 다른 키가 있는 두 개의 키 값 쌍이 포함되어 있습니다. 스위치가 없으면 명령이 오류를 발생시켰을 것입니다.

예제 5: 단일 요소 배열 왕복

이 명령은 -NoEnumerate 스위치를 사용하여 단일 요소 JSON 배열을 왕복하는 예제를 보여 줍니다.

Write-Output "With -NoEnumerate: $('[1]' | ConvertFrom-Json -NoEnumerate |
    ConvertTo-Json -Compress)"
Write-Output "Without -NoEnumerate: $('[1]' | ConvertFrom-Json |
    ConvertTo-Json -Compress)"

With -NoEnumerate: [1]
Without -NoEnumerate: 1

JSON 문자열에는 단일 요소가 있는 배열이 포함되어 있습니다. 스위치가 없으면 JSON을 PSObject로 변환한 다음 ConvertTo-Json 명령을 사용하여 다시 변환하면 단일 정수가 생성됩니다.

매개 변수

-AsHashtable

JSON을 해시 테이블 개체로 변환합니다. 이 스위치는 PowerShell 6.0에서 도입되었습니다. PowerShell 7.3부터 개체는 OrderedHashtable JSON에서 키 순서를 유지합니다. 이전 버전에서는 개체가 해시 테이블입니다.

ConvertFrom-Json cmdlet의 몇 가지 제한 사항을 극복할 수 있는 몇 가지 시나리오가 있습니다.

  • 이 스위치가 없으면 JSON 개체의 두 개 이상의 키가 대/소문자를 구분하지 않고 동일한 키로 처리됩니다. 이 경우 대/소문자 구분 없이 동일한 여러 키 중 마지막 키만 변환된 객체에 포함됩니다.
  • 이 스위치가 없으면 JSON에 빈 문자열인 키가 포함될 때마다 cmdlet이 오류를 throw합니다. PSCustomObject 빈 문자열인 속성 이름을 가질 수 없습니다. 예를 들어 project.lock.json 파일에서 발생할 수 있습니다.
  • 해시 테이블은 특정 데이터 구조에 대해 더 빠르게 처리할 수 있습니다.
형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-DateKind

JSON 문자열에서 날짜 시간 값을 구문 분석할 때 사용되는 메서드를 지정합니다. 이 매개 변수에 허용되는 값은 다음과 같습니다.

  • Default
  • Local
  • Utc
  • Offset
  • String

이러한 값이 변환에 미치는 영향에 대한 자세한 내용은 NOTES세부 정보를 참조하세요.

이 매개 변수는 PowerShell 7.5에서 도입되었습니다.

형식:Microsoft.PowerShell.Commands.JsonDateKind
허용되는 값:Default, Local, Utc, Offset, String
Position:Named
Default value:Default
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Depth

JSON 입력이 허용되는 최대 깊이를 가져오거나 설정합니다. 기본값은 1024입니다.

이 매개 변수는 PowerShell 6.2에서 도입되었습니다.

형식:Int32
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-InputObject

JSON 개체로 변환할 JSON 문자열을 지정합니다. 문자열이 포함된 변수를 입력하거나 문자열을 가져오는 명령이나 식을 입력합니다. 문자열을 ConvertFrom-Json로 전송할 수도 있습니다.

InputObject 매개 변수가 필요하지만 해당 값은 빈 문자열일 수 있습니다. 입력 개체가 빈 문자열인 경우 ConvertFrom-Json 출력을 생성하지 않습니다. InputObject 값은 $null수 없습니다.

형식:String
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-NoEnumerate

출력이 열거되지 않도록 지정합니다.

이 매개 변수를 설정하면 모든 요소를 개별적으로 보내는 대신 배열이 단일 개체로 전송됩니다. 이렇게 하면 JSON이 ConvertTo-Json통해 라운드트립될 수 있습니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

String

JSON 문자열을 ConvertFrom-Json에 전달할 수 있습니다.

출력

PSCustomObject

OrderedHashtable

참고

이 cmdlet은 Newtonsoft Json.NET사용하여 구현됩니다.

PowerShell 6부터 ConvertTo-Json 타임스탬프로 서식이 지정된 문자열을 DateTime 값으로 변환하려고 시도합니다.

PowerShell 7.5는 타임스탬프 문자열을 변환하는 방법을 제어할 수 있는 DateKind 매개 변수를 추가했습니다. 매개 변수는 다음 값을 허용합니다.

  • Default - 다음 규칙에 따라 타임스탬프를 [datetime] 인스턴스로 변환합니다.
    • 입력 문자열에 표준 시간대 정보가 없으면 Json.NET serializer는 값을 지정되지 않은 시간 값으로 변환합니다.
    • 표준 시간대 정보가 후행하는 Z인 경우, Json.NET serializer는 타임스탬프를 UTC 값으로 변환합니다.
    • 타임스탬프에 +02:00같은 UTC 오프셋이 포함된 경우 오프셋은 호출자의 구성된 표준 시간대로 변환됩니다. 기본 출력 서식은 원래 표준 시간대 오프셋을 나타내지 않습니다.
  • Local - [datetime] 시간에 타임스탬프를 인스턴스로 변환합니다. 타임스탬프에 UTC 오프셋이 포함된 경우 오프셋은 호출자의 구성된 표준 시간대로 변환됩니다. 기본 출력 서식은 원래 표준 시간대 오프셋을 나타내지 않습니다.
  • Utc - 값을 UTC 시간으로 [datetime] 인스턴스로 변환합니다.
  • Offset - 타임스탬프를 해당 인스턴스에 유지된 원래 문자열의 표준 시간대 오프셋을 사용하여 [DateTimeOffset] 인스턴스로 변환합니다. 원시 문자열에 표준 시간대 오프셋이 없으면 DateTimeOffset 값이 현지 표준 시간대에 지정됩니다.
  • String - [string] 인스턴스 값을 유지합니다. 이렇게 하면 모든 사용자 지정 구문 분석 논리를 원시 문자열 값에 적용할 수 있습니다.

PSObject 형식은 JSON 문자열에 표시된 대로 속성의 순서를 유지 관리합니다. PowerShell 7.3부터 AsHashtable 매개변수가 OrderedHashtable를 만듭니다. 키-값 쌍은 JSON 문자열에 표시된 순서대로 추가됩니다. OrderedHashtable 해당 순서를 유지합니다.