여기 내 상황이 있습니다. 나는 PowerShell-JSON 라이브러리를 가져 오는 PowerShell 모듈을 가지고있다. 이 라이브러리는 JSON 문자열을 PowerShell 객체로 변환합니다. My 모듈은 CouchDB에 대한 인터페이스를 제공하므로 JSON 문자열은 HTTP 호출에서 가져옵니다. 함수 (Send-CouchDbRequest
)는 CouchDB에 HTTP 요청을하고 응답 데이터를 문자열로 반환합니다 (응답 데이터는 StreamReader.ReadToEnd()
을 사용하여 얻음).PowerShell의 형식 확인 메커니즘에서 이것이 가장 중요한 경우입니까?
다른 함수 Get-CouchDbDocument
에서 Send-CouchDbRequest를 호출하고 출력을 변수 $json
에 저장합니다. $json.GetType()
및 $json | Get-Member
에 따르면이 유형은 System.String
입니다. 그런 다음이 문자열을 ConvertFrom-JSON
에 입력하면 제공된 JSON 문서에 따라 정의 된 속성을 사용하여 PSCustomObject
을 다시 얻습니다. 대신 PowerShell 해시 테이블의 문자열 표현 (예 : @{name1=value; name2=value2; name3=value3}
)을 얻습니다. 반환 된 개체는 PSCustomObject
이 아닌 위에서 설명한 것과 동일한 테스트를 기반으로 한 System.String
유형입니다. PowerShell이 일종의 자동 (및 원치 않는/불필요한) 유형 변환을 여기에서하고있는 것처럼 보입니다.
버그는 PowerShell-JSON에 없습니다. 저는 이미 discussed it with the author을 사용하고 있으며, 동일한 모듈을 사용하기 위해 ConvertFrom-JSON
에 대한 호출을 모두 처리했습니다. 따라서 오류는 어딘가에서 내 코드에 있어야한다고 결론을 내릴 수 있습니다. 아마도 문자열이 HTTP를 통해 들어 왔기 때문일 수 있습니다. 보내기-CouchDbRequest에 대한
function Get-CouchDbDocument {
param(
[string] $document = $(throw "Document ID is required."),
[string] $database = $(throw "Database name is required."),
[string] $server = "127.0.01",
[int] $port = 5984
)
$json = Send-CouchDbRequest -dbHost $server -port $port -database $database -document $document -includeDoc
$document = $json | ConvertFrom-JSON
Write-Output $document
}
코드는 매우 긴, 그리고 can be found on GitHub 다음과 같이
가져 오기 - CouchDbDocument에 대한 코드입니다. 다른 곳에서 설명한 시나리오에서 실패한 샘플 JSON 문자열은 다음과 같습니다.
{"_id":"f42d2e0c5be0a7ab7bdc1cba23fc1d73","_rev":"1-59414e77c768bc202142ac82c2f129de","key":"value"}
의견이 있으십니까? 미리 감사드립니다.
테스트를 위해'Send-CouchDbRequest'의 결과를 게시 할 수 있습니까? 아니면 CodePlex에 관한 문제입니까? – stej
이것이 CodePlex 문제의 JSON 문자열입니다. 나는 그 질문을 갱신 할 것이다. – alastairs