如何读取JSON文件并重新排列代码

时间:2019-01-26 15:45:25

标签: json powershell

我想读取我的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 :(得分:2)

您需要的是

  • 将Json转换为对象

  • 选择所需的成员

  • 转换回json

    $Data = $JsonString | ConvertFrom-Json
    
    $Data.One.Two.Data | ConvertTo-Json
    

答案 1 :(得分:1)

使用此Flatten-Object cmdlet

@'
{
  "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"
}

这与您定义的“ 类似”并不完全相同,因为它在属性名称中使用了父名称。这是为了确保名称始终唯一,因为在不同的父项下使用相同的子名称是技术上的可能。

相关问题