这是PowerShell';s型解析机制?

这是PowerShell';s型解析机制?,powershell,types,type-conversion,powershell-2.0,Powershell,Types,Type Conversion,Powershell 2.0,这是我的情况。我有一个导入库的PowerShell模块;此库将JSON字符串转换为PowerShell对象。我的模块提供了一个到CouchDB的接口,因此我的JSON字符串是从HTTP调用中获得的。我有一个函数,Send CouchDbRequest,它向CouchDB发出HTTP请求,并以字符串形式返回响应数据(响应数据是使用StreamReader.ReadToEnd()获得的) 在另一个函数中,Get CouchDbDocument,我调用Send CouchDbRequest,并将输出保

这是我的情况。我有一个导入库的PowerShell模块;此库将JSON字符串转换为PowerShell对象。我的模块提供了一个到CouchDB的接口,因此我的JSON字符串是从HTTP调用中获得的。我有一个函数,
Send CouchDbRequest
,它向CouchDB发出HTTP请求,并以字符串形式返回响应数据(响应数据是使用
StreamReader.ReadToEnd()
获得的)

在另一个函数中,
Get CouchDbDocument
,我调用Send CouchDbRequest,并将输出保存在变量
$json
中。根据
$json.GetType()
$json | Get Member
,这是类型
System.String
。如果我随后将这个字符串输入到
convertfromjson
,我希望返回一个
PSCustomObject
,其属性是根据提供给它的JSON文档定义的;相反,我得到了PowerShell哈希表的字符串表示形式,即,
@{name1=value;name2=value2;name3=value3}
。返回的对象也是基于上述相同测试的
System.String类型,而不是预期的
PSCustomObject
。在我看来,PowerShell正在进行某种类型的自动(以及不需要/不需要的)类型转换

这个bug不在PowerShell JSON中-我已经有了,我们都设法获得了对
ConvertFrom JSON
的相同调用,以便在虚拟模块中工作。因此,我得出结论,错误一定在我的代码中的某个地方,可能是字符串通过HTTP传入的结果

Get CouchDbDocument的代码如下:

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
}
Send CouchDbRequest的代码相当长,而且。示例JSON字符串在我描述的场景中失败,在其他地方可以使用,它是:

{"_id":"f42d2e0c5be0a7ab7bdc1cba23fc1d73","_rev":"1-59414e77c768bc202142ac82c2f129de","key":"value"}

有什么想法吗?事先非常感谢。

哇,这一次相当棘手

帮助您的是更改存储对象的变量名

$doc = $json | ConvertFrom-JSON
Write-Output $doc
原因:您在
param
块中指定了
$document
变量的类型应该是
[string]
。这就是为什么PowerShell会尝试将输出从
convertfromJSON
转换为字符串


另一种可能的解决方案是指定
$document
参数,但不指定类型。

您可以发布
发送CouchDbRequest
的结果来测试它吗?或者是CodePlex问题中的那个?这是CodePlex问题中的JSON字符串。我将更新问题。面部->手掌。在接受答案之前,我会在今晚回家的时候再检查一遍,但我99%肯定这会解决问题。奥卡姆的剃刀又来了!我也没发现问题,只好试试。无论如何,我希望我找到了;)分类;非常感谢!让另一双眼睛看看总是有帮助的:-)在家里进行配对编程有点困难;)