ConvertFrom-Json失败并显示消息“无法处理参数,因为”name“的值无效。”
"{ """": ""test""}" | ConvertFrom-Json
有没有比手动更好的方法?
答案 0 :(得分:2)
虽然JSON RFC允许空键 [1]
, ConvertFrom-Json
不 ,遗憾的是,由于技术原因:它返回[pscustomobject]
类型的对象,这些对象不允许具有名称的属性是空字符串。
相比之下,PowerShell的[hashtable]
([System.Collections.Hashtable]
)类型及其ordered-keys兄弟([System.Collections.Specialized.OrderedDictionary]
)执行允许具有空字符串键值的条目(每个实例1个。
ConvertFrom-Json
不提供创建哈希表,但第三方newtonsoft.json模块可以。该模块是广泛使用的Microsoft-recommended Json.NET library的包装器。它附带了替代cmdlet ConvertFrom-JsonNewtonsoft
和ConvertTo-JsonNewtonsoft
:
> '{ "": "test"}' | ConvertFrom-JsonNewtonsoft
Name Value
---- -----
test
输出类型为[System.Collections.Specialized.OrderedDictionary]
,即带有有序键的哈希表,在这种情况下相当于以下有序哈希表文字:
[ordered] @{ '' = 'test' }
您可以使用.''
或['']
使用空键引用该条目:
> $o = $'{ "": "test"}' | ConvertFrom-JsonNewtonsoft
> $o.'', $o['']
test
test
在没有其他设置的PowerShell v5中,以及在安装PowerShell PackageManagement modules后的v4(以及v3)中,您可以从PowerShell Gallery安装模块,如下所示提升 console:
Install-Module Newtonsoft.Json
或者,使用Install-Module -Scope CurrentUser Newtonsoft.Json
仅为当前用户安装。
[1] JSON名称(键)定义为string
(member = string name-separator value
),“字符串是零或更多的序列Unicode字符“(强调添加)。
答案 1 :(得分:0)
至少在 PowerShell 7.1.3 中,ConvertFrom-Json
有一个开关 -AsHashTable
允许它处理空键。
PS> '{ "": "test" }' | ConvertFrom-Json
ConvertFrom-Json: The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.
PS> '{ "": "test" }' | ConvertFrom-Json -AsHashTable
Name Value
---- -----
test