Использование PowerShell, как удалить свойство в json при нескольких уровнях - PullRequest
0 голосов
/ 17 января 2020

Использование powershell, как удалить свойство synonymMaps в json.

{
    "name":  "dev-contentitem-text-index",
    "defaultScoringProfile":  null,
    "fields":  [
                   {
                       "name":  "id",
                       "type":  "Edm.String",
                       "searchable":  false,
                       "filterable":  false,
                       "retrievable":  true,
                       "sortable":  false,
                       "facetable":  false,
                       "key":  true,
                       "indexAnalyzer":  null,
                       "searchAnalyzer":  null,
                       "analyzer":  null,
                       "synonymMaps":  ""
                   },
                   {
                       "name":  "myvalue",
                       "type":  "Edm.String",
                       "searchable":  false,
                       "filterable":  false,
                       "retrievable":  true,
                       "sortable":  true,
                       "facetable":  false,
                       "key":  true,
                       "indexAnalyzer":  null,
                       "searchAnalyzer":  null,
                       "analyzer":  null,
                       "synonymMaps":  ""
                   }
               ]
}

Я пытался удалить synonymMaps, но я потерял имя свойства верхнего уровня и defaultScoringProfile. Мне нужно все это целым, но с удаленным синонимом.

$indexDefinition  = Get-Content $storedIndex.FullName

$indexDefinition = ($indexDefinition| ConvertFrom-Json)

$indexDefinition.fields|Select-Object * -ExcludeProperty "*synonymMaps*"

1 Ответ

0 голосов
/ 17 января 2020

Это вложенная json -структура, для нее нужна рекурсивная функция:

$json = @"
{
    "name":  "dev-contentitem-text-index",
    "defaultScoringProfile":  null,
    "fields":  [
                   {
                       "name":  "id",
                       "type":  "Edm.String",
                       "searchable":  false,
                       "filterable":  false,
                       "retrievable":  true,
                       "sortable":  false,
                       "facetable":  false,
                       "key":  true,
                       "indexAnalyzer":  null,
                       "searchAnalyzer":  null,
                       "analyzer":  null,
                       "synonymMaps":  ""
                   },
                   {
                       "name":  "myvalue",
                       "type":  "Edm.String",
                       "searchable":  false,
                       "filterable":  false,
                       "retrievable":  true,
                       "sortable":  true,
                       "facetable":  false,
                       "key":  true,
                       "indexAnalyzer":  null,
                       "searchAnalyzer":  null,
                       "analyzer":  null,
                       "synonymMaps":  ""
                   }
               ]
}

"@

function Remove-Property {
  param(
    [Parameter(Mandatory, ValueFromPipeline, Position = 0)]
    [object] $inputObject,
    [Parameter(Mandatory, Position = 1)]
    [string] $namePattern
  )
  process {
    foreach ($element in $inputObject) {
      foreach ($propName in $element.psobject.Properties.Name) {
        if ($propName -like $namePattern) {
          $element.psobject.Properties.Remove($propName)
        }
        else {
            if( $element.$propName ) {
                Remove-Property -InputObject $element.$propName -namePattern $NamePattern | Out-Null
            }
        }
      }
    }
    return $inputObject
  }
}


# convert JSON to PSObject
$obj     = ConvertFrom-Json $json

# remove entries
$newObj  = $obj | Remove-Property -NamePattern 'synonymMaps*'

# convert back to json
$newJson = $newObj | ConvertTo-Json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...