这是PowerShell';s型解析机制?
这是我的情况。我有一个导入库的PowerShell模块;此库将JSON字符串转换为PowerShell对象。我的模块提供了一个到CouchDB的接口,因此我的JSON字符串是从HTTP调用中获得的。我有一个函数,这是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,并将输出保
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%肯定这会解决问题。奥卡姆的剃刀又来了!我也没发现问题,只好试试。无论如何,我希望我找到了;)分类;非常感谢!让另一双眼睛看看总是有帮助的:-)在家里进行配对编程有点困难;)