【问题标题】:Adding a substring in powershell在 powershell 中添加子字符串
【发布时间】:2021-11-16 05:32:26
【问题描述】:

我使用以下代码在 powershell 中导入了一个 csv 文件:

import-csv "input.csv" | ConvertTo-Json | Add-Content -Path "output.json"

我的输出:

{
 "users": [
     {
       "firstName": "name1",
       "lastName": "lastname1",
     }
     {
       "firstName": "name2",
       "lastName": "lastname2",
     }
}

csv 文件如下所示:

firstname,lastname
name1,lastname1
name2,lastname2

但我需要在子内容中添加一个名为“角色”的额外列(我不知道它叫什么)。它应该在姓氏之后,但仍然是用户对象的一部分,并且在每个条目中。

需要这个输出

  {
 "users": [
     {
       "firstName": "name1",
       "lastName": "lastname1"
       "roles:" ["role1", "role2"]
     }
     {
       "firstName": "name2",
       "lastName": "lastname2",
       "roles:" ["role1", "role2"]
     }
}

新输出

"Roles":  {
  "value":  [
    "Role1",
    "Role2"
    ],
  "Count":  2
} 

【问题讨论】:

  • 转换成JSON之前为什么不加呢?您从哪里获得新列的值?
  • 虽然在 csv 数据中添加一个额外的列并不难,但 PowerShell 不知道在其中添加什么来指定每个用户的实际角色。如果你只是添加它会更简单到 CSV
  • 额外列的值只是静态数据。我的问题是如何像多维数组一样添加这种方括号。如果可以直接在csv文件中添加数据也可以。
  • 你的 JSON 语法输出错误
  • 生成该 json 的 csv 在哪里?它是什么样子的?因为您显示的 CSV 不会产生您显示的输出。

标签: json powershell object


【解决方案1】:
@'
firstname,lastname
name1,lastname1
name2,lastname2
'@ | 
ConvertFrom-Csv |
    Select-Object -Property *,@{Name = 'Roles';Expression= {@('Role1','Role2')}} |
        ConvertTo-Json

... 产生这个输出:

[
  {
    "firstname": "name1",   
    "lastname": "lastname1",
    "Roles": [
      "Role1",
      "Role2"
    ]
  },
  {
    "firstname": "name2",   
    "lastname": "lastname2",
    "Roles": [
      "Role1",
      "Role2"
    ]
  }
]

【讨论】:

  • 看起来不错,但静态数据看起来就像 csv 数据。它需要是对象中的对象。角色必须看起来像“用户”
  • ??什么 ?? ...您确定您了解 JSON 的工作原理吗?
  • 我假设@Stefan 正在寻找的是"roles" 属性值是一个array;例如,"roles": [ "role1", "role2" ]
  • @mklement0 但这不能保存为普通的 CSV...
  • 确实,@Dennis - 必须使用嵌入在单个字符串中的自定义数组表示,导入者需要注意这一点。
【解决方案2】:

Add-Member 是一种有点慢但可行的方法...

$json = ConvertFrom-Json @'
{
    "users": [{
            "firstName": "name1",
            "lastName": "lastname1"
        },
        {
            "firstName": "name2",
            "lastName": "lastname2"
        }
    ]
}
'@
 
$json.users | Add-Member -MemberType NoteProperty -Name Roles -Value 'empty'

$json | ConvertTo-Json

输出

{
    "users": [{
            "firstName": "name1",
            "lastName": "lastname1",
            "Roles": "empty"
        },
        {
            "firstName": "name2",
            "lastName": "lastname2",
            "Roles": "empty"
        }
    ]
}

但我们倾向于你正在寻找类似的东西......

$json | Add-Member -MemberType NoteProperty -Name roles -Value @('role1','role2')

输出

{
  "users": [
    {
      "firstName": "name1",
      "lastName": "lastname1"
    },
    {
      "firstName": "name2",
      "lastName": "lastname2"
    }
  ],
  "roles": [
    "role1",
    "role2"
  ]
}

【讨论】:

  • 嗨丹尼斯。角色必须在姓氏之后。它必须在列表中出现两次。
  • 您的意思是在添加到 $json.users 时与上面的第一个输出一样?请您提供一个完整的示例来说明您想要的结果吗?
猜你喜欢
  • 2021-07-31
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2018-09-07
  • 2021-10-05
  • 2015-12-08
  • 1970-01-01
  • 2014-10-27
相关资源
最近更新 更多