在powershell中使用empy字符串键解析json

时间:2016-11-28 15:07:31

标签: json powershell-v4.0

ConvertFrom-Json失败并显示消息“无法处理参数,因为”name“的值无效。” "{ """": ""test""}" | ConvertFrom-Json

有没有比手动更好的方法?

2 个答案:

答案 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-JsonNewtonsoftConvertTo-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名称(键)定义为stringmember = 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