Как прочитать файл JSON и изменить код - PullRequest
0 голосов
/ 26 января 2019

Я хочу прочитать мой файл JSON и написать тот же файл с переставленным кодом. Мой файл JSON дает мне что-то вроде этого:

{
  "one": [
    {
      "name": { "displayName": "Alex" },
      "two": [
        {
          "date": "20072008",
          "data": {
            "id": "524556",
            "fullname": "Alexandre Gagne",
            "name": "Alexandre",
            "lastName": "Gagne"
          }
        }
      ]
    }
  ]
}

Но я хочу что-то вроде этого

{
  "id": "524556",
  "fullname": "Alexandre Gagne",
  "name": "Alexandre",
  "lastName": "Gagne"
}

Вот код, который я использую:

$jsonfile118 = 'C:/Users/Web_Q/Desktop/json/8472382-2017-2018.json'
$json118 = Get-Content $jsonfile118 | Out-String | ConvertFrom-Json
$json118.stats.splits
$json118 | Add-Member -Type NoteProperty -Name "id" -Value 524556
$json118 | ConvertTo-Json -Depth 10 | Set-Content $jsonfile118

Я также использую другой фрагмент кода, который дает мне то, что я хочу, но только в терминале, когда я использую Set-Content, вывод выглядит так:

"{ \'id'\ 536453 }"

Вот код:

(New-Object PSObject |
    Add-Member -PassThru NoteProperty id $json118.stats.splits.getId
) | ConvertTo-Json

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Использование этого Flatten-Object командлета :

@'
{
  "one": [
    {
      "name": { "displayName": "Alex" },
      "two": [
        {
          "date": "20072008",
          "data": {
            "id": "524556",
            "fullname": "Alexandre Gagne",
            "name": "Alexandre",
            "lastName": "Gagne"
          }
        }
      ]
    }
  ]
}
'@ | ConvertFrom-Json | Flatten-Object -Depth 9 -Base "" | ConvertTo-Json

Результат:

{
    "one.name.displayName":  "Alex",
    "one.two.date":  "20072008",
    "one.two.data.id":  "524556",
    "one.two.data.fullname":  "Alexandre Gagne",
    "one.two.data.name":  "Alexandre",
    "one.two.data.lastName":  "Gagne"
}

Это не совсем то, что вы определили как " Что-то вроде этого", потому что он использует родительские имена в именах свойств.Это делается для того, чтобы имена всегда были уникальными, поскольку технически возможно иметь одинаковые дочерние имена у разных родителей.

0 голосов
/ 26 января 2019

Что вам нужно,

  • Преобразование Json в объект

  • Выберите необходимый элемент

  • Преобразование обратно в json

    $Data = $JsonString | ConvertFrom-Json
    
    $Data.One.Two.Data | ConvertTo-Json
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...