假设我有这样的文字:
{
"source": "Analytics 13 {Employee_Info.acl} {Employee_Data}",
"lastRecNo": "3",
"columns": {
"ID": "numeric",
"NAME": "character",
"EFFECTIVE_DATE": "date",
"ROLE": "character"
},
"data": [{
"ID": 1,
"NAME": "Bill Smith",
"EFFECTIVE_DATE": "2018-10-01",
"ROLE": "Director {Regional},{Call Center}"
},
{
"ID": 2,
"NAME": "Ellen Jones",
"EFFECTIVE_DATE": "2018-07-01",
"ROLE": "Manager"
},
{
"ID": 3,
"NAME": "Sam Edwards",
"EFFECTIVE_DATE": "2018-09-01",
"ROLE": "Supervisor"
}]
}
我想让RegEx匹配“数据”数组中的每个对象(包括花括号)。
第一个匹配项是:
{
"ID": 1,
"NAME": "Bill Smith",
"EFFECTIVE_DATE": "2018-10-01",
"ROLE": "Director {Regional},{Call Center}"
}
第二个是:
{
"ID": 2,
"NAME": "Ellen Jones",
"EFFECTIVE_DATE": "2018-07-01",
"ROLE": "Manager"
}
第三个是
{
"ID": 3,
"NAME": "Sam Edwards",
"EFFECTIVE_DATE": "2018-09-01",
"ROLE": "Supervisor"
}
我将在PowerShell中使用哪种正则表达式模式进行操作?
请注意,第一个匹配项实际上在“ ROLE”字段的文本中有一些多余的花括号,这不会干扰匹配项。
到目前为止,我已经尝试过'(?<={).*?(?=})'
,但第一场比赛是:
"source": "Analytics 13 {Employee_Info.acl
该结果不是“数据”数组的一部分,并且不包含大括号。我知道我缺少“确保我们在方括号/“数据”数组中”的内容,而且我可能没有考虑到“数据”第一个对象中“角色”字段中的多余花括号我想忽略的数组。
答案 0 :(得分:6)
使用ConvertFrom-Json
和ConvertTo-Json
cmdlet可以轻松完成您的任务。
这是一个简短的示例:
首先,您将文本文件内容转换为变量。
$JSON = @"
[
{
"source": "Analytics 13 {Employee_Info.acl} {Employee_Data}",
"lastRecNo": "3",
"columns": {
"ID": "numeric",
"NAME": "character",
"EFFECTIVE_DATE": "date",
"ROLE": "character"
},
"data": [{
"ID": 1,
"NAME": "Bill Smith",
"EFFECTIVE_DATE": "2018-10-01",
"ROLE": "Director {Regional},{Call Center}"
},
{
"ID": 2,
"NAME": "Ellen Jones",
"EFFECTIVE_DATE": "2018-07-01",
"ROLE": "Manager"
},
{
"ID": 3,
"NAME": "Sam Edwards",
"EFFECTIVE_DATE": "2018-09-01",
"ROLE": "Supervisor"
}]
}
]
"@
然后,您只需使用ConvertFrom-Json
cmdlet从JSON进行转换。
ConvertFrom-Json -InputObject $JSON
输出:
source lastRecNo columns data
------ --------- ------- ----
Analytics 13 {Employee_Info.acl} {Employee_Data} 3 @{ID=numeric; NAME=character; EFFECTIVE_DATE=date; ROLE=character} {@{ID=1; NAME=Bill Smith; EFFECTIVE_DATE=2018-10-01; ROLE=Director {Regional},{Call Center}}, @...
然后,您可以使用ConvertTo-Json
cmdlet将数据从DATA返回为JSON格式。在一起。
$PSObject = ConvertFrom-Json -InputObject $JSON
foreach ($item in $PSObject.data){
ConvertTo-Json $item
}
输出:
{
"ID": 1,
"NAME": "Bill Smith",
"EFFECTIVE_DATE": "2018-10-01",
"ROLE": "Director {Regional},{Call Center}"
}
{
"ID": 2,
"NAME": "Ellen Jones",
"EFFECTIVE_DATE": "2018-07-01",
"ROLE": "Manager"
}
{
"ID": 3,
"NAME": "Sam Edwards",
"EFFECTIVE_DATE": "2018-09-01",
"ROLE": "Supervisor"
}
您现在可以为filter conditions
中的DATA项目添加foreach loop
。