如何在powershell中迭代json对象

Posted

技术标签:

【中文标题】如何在powershell中迭代json对象【英文标题】:How to iterate json object in powershell 【发布时间】:2022-01-23 10:49:49 【问题描述】:

我正在使用以下代码在 PowerShell 中迭代 JSON 对象

    $awsFileResponse = '
   "commitId":"opb274750f582ik",
   "blobId":"io6956a1a967243514e194lk54b86",
   "filePath":"PowershellScript.ps1",
   "fileMode":"NORMAL",
   "fileSize":5755,
   "fileContent":"7"
'
foreach($KeyParam in $awsFileResponse)

    Write-Host 'Ashish'
    Write-Host $KeyParam
    Write-Host $KeyParam.NAME
    Write-Host $KeyParam.VALUE
    if($KeyParam.NAME -eq 'fileContent')
    
        $fileContentResponse = $KeyParam.VALUE
        Write-Host $fileContentResponse
    


我没有得到我正在寻找的确切输出。

    以下行没有打印任何内容 写主机 $KeyParam 写入主机 $KeyParam.NAME 写入主机 $KeyParam.VALUE 如果条件不往里面走

【问题讨论】:

【参考方案1】:

它不起作用,因为变量 awsFileResponse 不是 Json 对象而是字符串。因此,首先您必须将字符串解析为自定义对象。然后你必须循环它里面的所有属性。并检查 $keeyParam.NAME 而不是 $keyParam 对象的 fileContent 键条件。

工作代码

   $awsFileResponse = '
   "commitId":"7cf4ca8ea129c2b9b274750f58245605e081580e",
   "blobId":"1d46ec453a6956a1a967243514e1944754c54b86",
   "filePath":"PowershellScript.ps1",
   "fileMode":"NORMAL",
   "fileSize":5755,
   "fileContent":"7"
'

#Parse to Json Object 
$jsonObject = $awsFileResponse | ConvertFrom-Json;

#loop all custom object properties
foreach($KeyParam in $jsonObject.psobject.properties)

    Write-Host 'Ashish'
    Write-Host $KeyParam
    Write-Host $KeyParam.NAME
    Write-Host $KeyParam.VALUE
    if($KeyParam.NAME -eq 'fileContent')
    
        $fileContentResponse = $KeyParam.VALUE
        Write-Host $fileContentResponse
    


【讨论】:

以上是关于如何在powershell中迭代json对象的主要内容,如果未能解决你的问题,请参考以下文章

如何迭代嵌套的 JSON 对象 [重复]

PowerShell - 使用排序的对象数组打印 JSON 输出?

如何在包含字典和列表的python中迭代json对象

如何在 C# 中迭代​​ JSON 并将每个对象添加到 List?

如何迭代角度 json 对象

我有一个对象的 .log 文件,如何将它们转换为 JSON 对象以便在 Javascript 中进行迭代?