【问题标题】:Powershell convertto-json without labels没有标签的Powershell转换为json
【发布时间】:2017-11-10 03:07:30
【问题描述】:

如何正确地将对象属性的 Powershell 数组转换为 json 值数组,即数组中没有对象属性标签。

例如: 我想为 chart.js 制作 2 个 json 数组 我将对一些流程对象进行分组:

$processgroup = get-process | group -property name

$processgroup.gettype()

IsPublic IsSerial Name                                     BaseType                                                                                 
-------- -------- ----                                     --------                                                                                 
True     True     Object[]                                 System.Array  

$chartlabels = $processgroup.name | convertto-json

$chartlabels

$chartlabels
[
    "ApMsgFwd",
    "ApntEx",
    "Apoint",
    "ApplicationFrameHost",
    "armsvc",
    "BtwRSupportService",
    "chrome",
    "com.docker.proxy",
    "com.docker.service",
    "concentr",
    "conhost",
    "csrss",
    "dllhost",
    "Docker for Windows",
    "dockerd",
    "dwm",
    "Everything",
    "EXCEL",
    "explorer",
    "fontdrvhost",
    "GROOVE",
    "hidfind",
    "HidMonitorSvc",
    "Idle",
    "iexplore",
    "IpOverUsbSvc",
    "jucheck",
    "jusched",
    "LicensingUI",
    "lsass",
    "mDNSResponder",
    "Memory Compression",
    "mqsvc",
    "MSASCuiL",
    "MsMpEng",
    "MSOIDSVC",
    "MSOIDSVCM",
    "MySQLNotifier",
    "NisSrv",
    "notepad",
    "notepad++",
    "nvSCPAPISvr",
    "nvvsvc",
    "nvwmi64",
    "nvxdsync",
    "OfficeClickToRun",
    "OneDrive",
    "OUTLOOK",
    "powershell",
    "powershell_ise",
    "prevhost",
    "Receiver",
    "redirector",
    "rundll32",
    "RuntimeBroker",
    "SearchIndexer",
    "SearchUI",
    "Secure System",
    "SecurityHealthService",
    "SelfServicePlugin",
    "services",
    "SettingSyncHost",
    "ShellExperienceHost",
    "sihost",
    "SkypeHost",
    "smss",
    "SMSvcHost",
    "spiceworks",
    "spiceworks-httpd",
    "spoolsv",
    "SppExtComObj",
    "sppsvc",
    "sqlwriter",
    "svchost",
    "System",
    "SystemSettings",
    "taskhostw",
    "TSVNCache",
    "vmcompute",
    "vmms",
    "vmnat",
    "vmnetdhcp",
    "vmware-authd",
    "vmware-tray",
    "vmware-usbarbitrator64",
    "wfcrun32",
    "wininit",
    "winlogon",
    "WINWORD",
    "WmiPrvSE",
    "WUDFHost"
]

#this is the array I want for charts labels, now for the chart value array

$chartvalues = $processgroup | select count | convertto-json

$chartvalues
[
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  30
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  5
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  4
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  30
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  75
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    },
    {
        "Count":  2
    },
    {
        "Count":  1
    },
    {
        "Count":  1
    }
]

如何省略“计数”标签,以便 PowerShell 仅创建一个包含值的 json 数组,就像在进程名称数组中一样。

我试过了

$chartvalues = $processgroup.count

计算组数

我试过了

$chartvalues = $ processgroup | select count -expandproperty count | convertto-json

结果和上面的例子一样

【问题讨论】:

    标签: json powershell powershell-3.0


    【解决方案1】:

    你想要一个列表,而不是带有键/值对的对象,所以这应该可以工作*:

     $groups| foreach-object {$_.count}|convertto-json
    

    当您在管道之后进行选择时,它会创建一个对象,从而将对象属性名称以及值作为键/值对推送到 json 转换过程中。 即,如果您使用 select 作为 name 属性,您也会在 json 中获得名称/值对...

     $groups| select-object name| convertto-json
    

    *可能是更好的解决方案...但它确实有效..

    【讨论】:

    • 感谢古玩 - 很高兴知道!
    【解决方案2】:

    真傻 - 我只需要选择并展开属性。像这样。

    $chartvalues = $processgroup | select -expandproperty count | convertto-json
    
    $chartvalues
    [
        1,
        1,
        1,
        1,
        1,
        1,
        30,
        1,
        1,
        1,
        5,
        2,
        1,
        1,
        1,
        1,
        2,
        1,
        1,
        2,
        1,
        1,
        1,
        1,
        4,
        1,
        1,
        1,
        30,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        2,
        1,
        1,
        2,
        2,
        1,
        1,
        1,
        1,
        1,
        2,
        1,
        1,
        1,
        2,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        2,
        1,
        2,
        1,
        1,
        1,
        1,
        75,
        1,
        1,
        1,
        2,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        1,
        2,
        1,
        1
    ]
    

    【讨论】:

      【解决方案3】:

      您所要做的就是使用 Select-Object 的 -ExpandProperty 属性来实现您声明的愿望。是否有任何理由不保留单个 JSON 数组中关联的属性-> 值表示法?例如:

      $processgroup = get-process | group -property name,count | select name,count | convertto-json
      

      产量:

      $processgroup
      [
          {
              "Name":  "acevents",
              "Count":  1
          },
          {
              "Name":  "acrotray",
              "Count":  1
          },
          {
              "Name":  "AGSService",
              "Count":  1
          },
          {
              "Name":  "aiCOMMAPI",
              "Count":  1
          },
          {
              "Name":  "armsvc",
              "Count":  1
          },
          {
              "Name":  "audiodg",
              "Count":  1
          },
          {
              "Name":  "AuditManagerService",
              "Count":  1
          },
          {
              "Name":  "CcmExec",
              "Count":  1
          },
          {
              "Name":  "chrome",
              "Count":  9
          },
          {
              "Name":  "conhost",
              "Count":  2
          },
          {
              "Name":  "csrss",
              "Count":  2
          },
          {
              "Name":  "dllhost",
              "Count":  2
          },
          {
              "Name":  "dwm",
              "Count":  1
          },
          {
              "Name":  "explorer",
              "Count":  1
          },
          {
              "Name":  "Idle",
              "Count":  1
          },
          {
              "Name":  "lsass",
              "Count":  1
          },
          {
              "Name":  "lync",
              "Count":  1
          },
          {
              "Name":  "msdtc",
              "Count":  1
          }
      ]
      

      【讨论】:

      • 被否决的警察再次无故罢工!!哦不!
      • 只是因为-我猜-输出中需要“计数”值,而您的答案包括所有...
      • 这就是重点。当我们只是想帮助 OP 时,人们会出于荒谬和未知的原因投票。这是为了向他表明,尝试将两个离散数组与关联值关联起来的笨拙本质可以保持在不那么混乱的方式下,并且仍然可以实现预期的目标和更准确的关联。如果一个项目被推入或弹出他的任何一个数组。 $array1[nth] 不再对应于 $array2[nth] 没有非常特殊的考虑,而将它们放在一起绕过了这个问题。
      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 2015-08-09
      • 2017-01-15
      • 2020-04-27
      • 2015-08-23
      • 2020-06-21
      相关资源
      最近更新 更多