ConvertFrom-Json失败,并显示消息“由于“名称”的值无效,因此无法处理参数”。 "{ """": ""test""}" | ConvertFrom-Json
有比手动完成更好的方法吗?
虽然JSON RFC确实允许空键[1] ,ConvertFrom-Json
并没有不幸的是,由于技术方面的原因:它返回类型的对象[pscustomobject]
,这是不允许有名称为空字符串的属性。
相比之下,PowerShell的[hashtable]
([System.Collections.Hashtable]
)类型及其同级的有序键([System.Collections.Specialized.OrderedDictionary]
)确实允许输入具有空字符串键值(每个实例1个)的条目。
ConvertFrom-Json
不提供创建哈希表的功能,但是第三方newtonsoft.json模块可以提供。该模块是广泛使用的Microsoft推荐的 Json.NET库的包装。它带有替代cmdletConvertFrom-JsonNewtonsoft
和ConvertTo-JsonNewtonsoft
:
PS> '{ "": "test"}' | ConvertFrom-JsonNewtonsoft
Name Value
---- -----
test
截至2020年10月的更新:该模块的最新更新于2019年5月,捆绑的Newtonsoft.Json.dll
组件相当旧:它是version 8.0
,而撰写本文时的当前版本是12.0
。该模块的源代码可以在此处找到。
输出类型为[System.Collections.Specialized.OrderedDictionary]
,即具有有序键的哈希表,在这种情况下,等效于以下有序哈希表文字:
[ordered] @{ '' = 'test' }
您可以使用.''
或使用['']
空键引用该条目:
PS> $o = $'{ "": "test"}' | ConvertFrom-JsonNewtonsoft
PS> $o.'', $o['']
test
test
在没有附加设置的PowerShell v5中,以及在安装PowerShell PackageManagement模块之后的v4(以及v3)中,可以从PowerShell画廊中通过提升的控制台安装模块,如下所示:
Install-Module Newtonsoft.Json
或者,Install-Module -Scope CurrentUser Newtonsoft.Json
仅用于当前用户安装。
[1] JSON名称(键)定义为string
(member = string name-separator value
),“字符串是零个或多个Unicode字符的序列”(添加了强调)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句