【问题标题】:Format a nested hashtable格式化嵌套哈希表
【发布时间】:2015-05-23 16:43:14
【问题描述】:

给定一个包含异构数据的哈希表,例如:

$items = @{
  a = @{a1 = "A1"; a2 = "A2"; a3 = "A3" }
  b = 1234
  c = @{c1 = "C1"; c2 = "C2"; c3 = "C3" }
  d = [DateTime]::Now
}

当我尝试使用以下内容显示内容时:

$items | Format-Table -AutoSize

输出是:

Name Value
---- -----
c    {c3, c1, c2}
d    05/23/15 11:37:56
b    1234
a    {a2, a3, a1}

但是如何扩展嵌套哈希表的内容,以便我可以看到键值对,例如:

Name Value
---- -----
c    {c3=C3, c1=C1, c2=C2}
d    05/23/15 11:37:56
b    1234
a    {a2=A2, a3=A3, a1=A1}

嵌套键值对的确切显示格式不是很关键,我只是想看看它们。

【问题讨论】:

标签: powershell hashtable


【解决方案1】:

灵感来自于无所事事,那么

$items | ConvertTo-Json

看起来更具可读性(对我而言)

【讨论】:

  • 不仅更具可读性,可能更高效,最重要的是可以使用任意深度(通过Depth 参数)。
【解决方案2】:

您需要自己扩展嵌套哈希表:

$items | Format-Table Name, @{n='Value';e={
  if ($_.Value -is [Hashtable]) {
    $ht = $_.Value
    $a  = $ht.keys | sort | % { '{0}={1}' -f $_, $ht[$_] }
    '{{{0}}}' -f ($a -join ', ')
  } else {
    $_.Value
  }
}}

【讨论】:

    【解决方案3】:

    虽然不漂亮,但ConvertTo-Xml -As String 可以将嵌套数据结构显示到任意深度:

    $items | ConvertTo-Xml -As String
    

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多