Я недавно начал с TextFSM для извлечения данных из полуформатированного текста. Извлеченные данные должны быть сопоставлены с одним из простых типов (например, строка), сложных типов (например, группа связанных элементов, таких как структура) или коллекции / список сложных типов.
Пример данных i / p: (Примечание: ввод может быть не всегда JSON)
{
"cookie":"1539123566/5c904721-d477-17d4-9310-860a18d646cc",
"response":"yes",
"classId":"equipmentPsu",
"outConfigs":[
{
"id":"1",
"serial":"LIT193518YH",
"thermal":"ok",
"faultInst":[
{
"ack":"yes",
"cause":"power-problem",
"code":"F0883",
"created":"2018-09-20T01:22:18",
"descr":"***",
"affectedDN":"sys/chassis-1/psu-1",
"highestSeverity":"critical",
"severity":"critical",
"tags":"server",
},
{
"ack":"yes",
"cause":"equipment-inoperable",
"code":"F0374",
"created":"2018-09-20T01:22:17",
"descr":"***",
"affectedDN":"sys/chassis-1/psu-1",
"severity":"major",
"tags":"server",
}
]
},
{
"id":"2",
"serial":"LIT193518Z0",
"thermal":"ok",
"faultInst":[
{
"ack":"yes",
"cause":"equipment-inoperable",
"code":"F0374",
"created":"2018-09-20T01:22:17",
"descr":"***",
"severity":"major",
"tags":"server",
}
]
}
]
}
Я заинтересован в извлечении serial
и faultInst
, который является списком сложного типа Fault
Fault {
cause,
code,
severity
}
Используя приведенный ниже шаблон, я получил Cause, Code и Severity в виде отдельных списков:
Value Required,Filldown SerialNumber(\S+)
Value List FaultCause(\S+)
Value List FaultCode(\S+)
Value List FaultSeverity(\S+)
Start
^"serial":->Continue.Record
^"serial":"${SerialNumber}"
^"faultInst":\[->Fault
Fault
^"cause":"${FaultCause}"
^"code":"${FaultCode}"
^"severity":"${FaultSeverity}"->Fault
^\]->Start
Есть ли способ извлечь faultInst
под каждым серийным номером, где каждый элемент в faultInst
имеет тип Fault
?
Пожалуйста, руководство.