извлекать каждое значение json Thorugh Poweshell с определенным условием - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно проверить, если во всех, т.е. в ядре, certmgr, zipzoom и т. Д. c change_flag имеет значение ИСТИНА, а если unpack также ИСТИНА, чем для каждого имени get первого объекта, т.е. zipzoom, получить расширение т.е. .jar, получить информацию о файле, т.е. имя каждого файла, его локальный путь и путь к файлу.

и т. Д. Для ядра, cermgr, activemq с предварительным условием, упомянутым ранее, то есть change_flag равно TRUE, а если unpack также TRUE

[
  {
    "name": "kernel",
    "change_flag": "FALSE",
    "unpack": "FALSE",
    "extension": "jar",
    "fileinfo": [
      {
        "localPath": "Local path",
        "fileName": "kernel.jar",
        "filePath": "setupfiles\\controlroom"
      }
    ]
  },
  {
    "name": "activemq",
    "change_flag": "FALSE",
    "unpack": "FALSE",
    "extension": "jar",
    "fileinfo": [
      {
        "localPath": "Local path",
        "fileName": "activemq.jar",
        "filePath": "setupfiles\\controlroom"
      }
    ]
  },
  {
    "name": "certmgr",
    "change_flag": "FALSE",
    "unpack": "FALSE",
    "extension": "jar",
    "fileinfo": [
      {
        "localPath": "Local path",
        "fileName": "certmgr.jar",
        "filePath": "setupfiles\\controlroom"
      }
    ]
  },
  {
    "name": "zipzoom",
    "extension": "jar",
    "change_flag": "TRUE",
    "unpack": "TRUE",
    "fileinfo": [
      {
        "localPath": "Local path",
        "fileName": "zipzoom.jar",
        "filePath": "destpath1"
      },
      {
        "localPath": "Local path",
        "fileName": "localpath2\\file2",
        "filePath": "destpath2\\"
      }
    ]
  }
]

1 Ответ

0 голосов
/ 30 апреля 2020

Поскольку это JSON, вы можете использовать командлет ConvertFrom-Json для преобразования его в массив объектов PSObject и использовать предложение Where-Object для фильтрации необходимых вам объектов:

$json = @'
[
  {
    "name": "kernel",
    "change_flag": "FALSE",
    "unpack": "FALSE",
    "extension": "jar",
    "fileinfo": [
      {
        "localPath": "Local path",
        "fileName": "kernel.jar",
        "filePath": "setupfiles\\controlroom"
      }
    ]
  },
  {
    "name": "activemq",
    "change_flag": "FALSE",
    "unpack": "FALSE",
    "extension": "jar",
    "fileinfo": [
      {
        "localPath": "Local path",
        "fileName": "activemq.jar",
        "filePath": "setupfiles\\controlroom"
      }
    ]
  },
  {
    "name": "certmgr",
    "change_flag": "FALSE",
    "unpack": "FALSE",
    "extension": "jar",
    "fileinfo": [
      {
        "localPath": "Local path",
        "fileName": "certmgr.jar",
        "filePath": "setupfiles\\controlroom"
      }
    ]
  },
  {
    "name": "zipzoom",
    "extension": "jar",
    "change_flag": "TRUE",
    "unpack": "TRUE",
    "fileinfo": [
      {
        "localPath": "Local path",
        "fileName": "zipzoom.jar",
        "filePath": "destpath1"
      },
      {
        "localPath": "Local path",
        "fileName": "localpath2\\file2",
        "filePath": "destpath2\\"
      }
    ]
  }
]
'@

$result = ($json | ConvertFrom-Json) | 
     Where-Object { $_.change_flag -eq 'TRUE' -and $_.unpack -eq 'TRUE' } | 
     Select-Object name, extension, fileinfo

# output
$result

Вывод на экране:

name    extension fileinfo                                                                                                                                    
----    --------- --------                                                                                                                                    
zipzoom jar       {@{localPath=Local path; fileName=zipzoom.jar; filePath=destpath1}, @{localPath=Local path; fileName=localpath2\file2; filePath=destpath2\}}

Поскольку детали fileinfo также являются объектами со своими собственными свойствами, если вы хотите получить их по отдельности, вы можете сделать:

$result[0].fileinfo   # get the object by index

Или отфильтровать объект по имени:

($result | Where-Object { $_.name -eq 'zipzoom' }).fileinfo

для возврата

localPath  fileName         filePath  
---------  --------         --------  
Local path zipzoom.jar      destpath1 
Local path localpath2\file2 destpath2\
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...