作者:天天写程序 | 来源:互联网 | 2022-12-02 12:52
假设我有一些这样的文字:
{
"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匹配"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"
}
我会在PowerShell中使用什么正则表达式模式?
请注意,第一个匹配实际上在"ROLE"字段的文本中有一些额外的花括号,这不应该干扰匹配.
到目前为止我已尝试过'(?<={).*?(?=})'
,但第一场比赛是:
"source": "Analytics 13 {Employee_Info.acl
此结果不是"数据"数组的一部分,并且它不包括匹配中的花括号.我知道我遗漏了一些东西,说"确保我们在括号/"数据"数组中,我可能没有考虑"数据"第一个对象中"ROLE"字段中的额外花括号我想忽略的数组.
1> Kirill Pashk..:
使用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
.