使用 PowerShell 将多值 JSON 元素拆分为数组

使用 PowerShell 将多值 JSON 元素拆分为数组

我正在 PowerShell 中处理一些 JSON 数据。有些元素是多值的,用分号分隔,但多值的元素并不总是相同的。我想转换多值元素,无论它们发生在哪里,转换为 JSON 数组。

我做这件事时遇到了麻烦。我已经想出一种方法来识别哪些元素是多值的,但不确定在输出整个 JSON 时如何拆分它们。我是否需要构造一个自定义 PSObject 并将多值元素拆分成一个数组,然后再导出为 JSON?对于一个简单的任务来说,这似乎需要很多开销。

开始示例

{
  "Title": "Civil War Diary - Original and Transcript",
  "Date Created": "1863",
  "Access Rights": "Open Access",
  "Identifier": "e9f44e22b9a285c1c3e2ac0307d113f3",
  "Resource Type": "Text; Still Image"
}

期望输出

{
    "Title": "Civil War Diary - Original and Transcript",
    "Date Created": "1863",
    "Access Rights": "Open Access",
    "Identifier": "e9f44e22b9a285c1c3e2ac0307d113f3",
    "Resource Type": [
        "Text",
        "Still Image"
    ]
}

答案1

如上面的评论所述,这些数据源自 CSV 文件。我能够在 ForEach-Object 循环中添加三行,在其中修剪字段以将多值字段转换为数组,并在分隔符上拆分。

$csv | Foreach-Object {
    foreach ($property in $_.PSObject.Properties) {
        # Cast multi-valued fields to an array
        if ($property.value -like "*;*") {
            $property.value = [array]$property.value.Split(";")
        }
        # Trim fields
        $property.value = $property.value.trim()
    }
}

相关内容