我正在 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()
}
}