ConvertFrom-Json

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

Syntax

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

Description

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

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

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

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

참고 항목

PowerShell 6부터 cmdlet은 주석이 있는 JSON을 지원합니다. JSON 주석은 두 개의 슬래시(//) 문자로 시작합니다. JSON 주석은 cmdlet에 의해 출력되는 개체에 캡처되지 않습니다. PowerShell 6 ConvertFrom-Json 이전에는 JSON 주석이 발견되면 오류를 반환합니다.

예제

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

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

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

DisplayHint : 2
DateTime    : Friday, January 13, 2012 8:06:31 PM
Date        : 1/13/2012 8:00:00 AM
Day         : 13
DayOfWeek   : 5
DayOfYear   : 13
Hour        : 20
Kind        : 2
Millisecond : 400
Minute      : 6
Month       : 1
Second      : 31
Ticks       : 634620819914009002
TimeOfDay   : @{Ticks=723914009002; Days=0; Hours=20; Milliseconds=400; Minutes=6; Seconds=31; TotalDays=0.83786343634490734; TotalHours=20.108722472277776; TotalMilliseconds=72391400.900200009; TotalMinutes=1206.5233483366667;TotalSeconds=72391.4009002}
Year        : 2012

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

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

이 명령은 cmdlet을 Invoke-WebRequest 사용하여 웹 서비스에서 JSON 문자열을 가져와서 cmdlet을 사용하여 ConvertFrom-Json 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 문자열을 사용자 지정 개체로 변환

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

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

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

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

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

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

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

예제 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에서 키의 순서를 유지합니다. 이전 버전에서는 개체가 해시 테이블입니다.

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

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

-Depth

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

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

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

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

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

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoEnumerate

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

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

입력

String

JSON 문자열을 .에 파이프할 ConvertFrom-Json수 있습니다.

출력

PSCustomObject

OrderedHashtable

참고

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

PowerShell 6 ConvertTo-Json 부터 타임스탬프로 서식이 지정된 문자열을 DateTime 값으로 변환하려고 시도합니다. 변환된 값은 [datetime] 다음과 같이 속성이 Kind 설정된 인스턴스입니다.

  • Unspecified입력 문자열에 표준 시간대 정보가 없으면 입니다.
  • Utc- 표준 시간대 정보가 후행 Z인 경우 .
  • Local- 표준 시간대 정보가 다음과 같은 +02:00후행 UTC 오프셋으로 지정된 경우 오프셋이 호출자의 구성된 표준 시간대로 올바르게 변환됩니다. 기본 출력 서식은 원래 표준 시간대 오프셋을 나타내지 않습니다.

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