首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConvertFrom-Json为Powershell中的某些部分提供System.Object[]

ConvertFrom-Json为Powershell中的某些部分提供System.Object[]
EN

Stack Overflow用户
提问于 2020-05-23 03:49:17
回答 2查看 285关注 0票数 0

我对Windows PowerShell非常陌生。我正在尝试为下面的Json触发ConvertFrom-Json命令:-

代码语言:javascript
复制
$ret=[{"ID":"ABC","type":"Test","code":"AD","enabled":true,"sourceMappings":[{"source":"Test","values":[{"code":"AD","value":"Anderson","enabled":true,"canonicalValue":true,"downStreamDefaultValue":true}]}],"startDate":0,"endDate":0,"updatedBy":"YY","updateDate":1590085877449,"version":4}]

我得到了以下输出:-

代码语言:javascript
复制
ID             : ABC
type           : Test
code           : AD
enabled        : True
sourceMappings : {@{source=Test; values=System.Object[]}}
startDate      : 0
endDate        : 0
updatedBy      : YY
updateDate     : 1590085877449
version        : 4

如果您注意到分配给System.Object[]的值,.Please请帮助我如何在输出中获得原始值。

EN

回答 2

Stack Overflow用户

发布于 2020-05-23 04:03:41

我认为转换是很好的。

您可以通过以下方式访问这些值:

代码语言:javascript
复制
$tmp = $ret | ConvertFrom-Json
$tmp.sourcemappings
$tmp.sourcemappings.values.code

诸若此类

票数 1
EN

Stack Overflow用户

发布于 2020-05-23 14:31:08

让我们首先使您的json文件更具可读性:

代码语言:javascript
复制
{
"ID":"ABC",
"type":"Test",
"code":"AD",
"enabled":true,
"sourceMappings":[{"source":"Test","values":[{"code":"AD","value":"Anderson","enabled":true,"canonicalValue":true,"downStreamDefaultValue":true}]}],
"startDate":0,
"endDate":0,
"updatedBy":"YY",
"updateDate":1590085877449,
"version":4
}

其次,您定义json变量的方式是不正确的。在powershell中,您需要定义使用@""@包围json内容的json变量。将$ret设置为等于json文件的正确方法如下所示:

代码语言:javascript
复制
$ret=@"
{
"ID":"ABC",
"type":"Test",
"code":"AD",
"enabled":true,
"sourceMappings":[{"source":"Test","values":[{"code":"AD","value":"Anderson","enabled":true,"canonicalValue":true,"downStreamDefaultValue":true}]}],
"startDate":0,
"endDate":0,
"updatedBy":"YY",
"updateDate":1590085877449,
"version":4
}
"@

在这种情况下,$ret将被视为string数据类型。然后,您可以使用以下命令转换json

代码语言:javascript
复制
$var = ConvertFrom-Json -InputObject $ret

你现在可以像平常一样与它互动。例如,$var.ID将输出ABC,如果您尝试使用$var.gettype()再次检查对象类型,它将输出:

代码语言:javascript
复制
IsPublic IsSerial Name                                     BaseType                                                                                                                                                                
-------- -------- ----                                     --------                                                                                                                                                                
True     False    PSCustomObject                           System.Object

其中类型为PSCustomObject

似乎我误解了这个问题,是我的错!

它说的原因是

代码语言:javascript
复制
sourceMappings : {@{source=Test; values=System.Object[]}}

是因为powershell不想显示整个值,因为值中有许多组件。您可以使用$var.sourceMappings查看sourceMappings类中的值,输出为:

代码语言:javascript
复制
source values
------ ------
Test   {@{code=AD; value=Anderson; enabled=True; canonicalValue=True; downStreamDefaultValue=True}}

如果你添加了$var.sourceMappings.code等,你可以继续深入查看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61962805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档