使用PowerShell在JSON中进行循环和搜索。

问题描述 投票:0回答:1

我有一个JSON文件,其内容如下。

{
  "status": "UP",
  "details": {
    "graphDBCheck": {
      "status": "UP"
    },
    "ds": {
      "status": "UP",
      "details": {
        "total": 100,
        "free": 50,
        "threshold": 30
      }
    },
    "db": {
      "status": "UP",
      "details": {
        "ADS": {
          "status": "UP",
          "details": {
            "database": "Influx",
            "hello": "Hello"
          }
        },
        "EARDS": {
          "status": "UP",
          "details": {
            "database": "Oracle",
            "hello": "Hello"
          }
        },
        "EFRDS": {
          "status": "UP",
          "details": {
            "database": "Sybase",
            "hello": "Hello"
          }
        }
      }
    }
  }
}

我需要将其转化为一个CSV文件 将每个元素的名称作为标题,将其状态或值作为下一行。第一个 "状态 "的列名是 "API_Status"

比如说,在这里的挑战是让这个动态的,使输出总是包括任何其他添加了 "状态 "的元素。

API_Status,graphDBCheck,ds,db,ADS,EARDS,EFRDS
UP,UP,UP,UP,UP,UP,UP

这里的挑战是如何让这个动态化 这样输出就会一直包含任何其他添加的元素,只要有 "状态 "在里面。

我试过了,它可以工作,但我需要一个动态的方法来实现。

$x = Invoke-RestMethod $url -Verbose:$VerbosePreference

[pscustomobject][ordered]@{
'API_Status' = $x.status
'db' = $x.details.db.status
'ds' = $x.details.diskspace.status
'ds_Total' = $x.details.ds.details.total
'ds_Free' = $x.details.ds.details.free
'graphDBCheck' = $x.details.graphDBCheck.status
'ADS' = $x.details.db.details.auroraDataSource.status
'EARDS' = $x.details.db.details.EARDS.status
'EFRDS' = $x.details.db.details.edsFirstRowsDataSource.status
}
json powershell dynamic traversal
1个回答
0
投票

在一个理想的世界里,json应该是这样的结构,作为一个具有统一属性的可扩展数组。

[
  {
    "name": "API_Status",
    "status": "UP"
  },
  {
    "name": "graphDBCheck",
    "status": "UP"
  },
  {
    "name": "ds",
    "status": "UP"
  },
  {
    "name": "db",
    "status": "UP"
  },
  {
    "name": "ADS",
    "status": "UP"
  },
  {
    "name": "EARDS",
    "status": "UP"
  },
  {
    "name": "EFRDS",
    "status": "UP"
  }
]

或者作为csv。

name,status
API_Status,UP
graphDBCheck,UP
ds,UP
db,UP
ADS,UP
EARDS,UP
EFRDS,UP

还有很多关于循环使用powerhell属性的文章 在PowerShell中对PSObject属性进行迭代。 或在json属性中循环。 遍历一个JSON文件PowerShell。

© www.soinside.com 2019 - 2024. All rights reserved.