让我们假设我有下面的案文:
interface GigabitEthernet1/0/1.1
qinq stacking vid 10 pe-vid 100
qinq stacking vid 20 pe-vid 100
qinq stacking vid 30 pe-vid 200
#
interface GigabitEthernet1/0/2.1
qinq stacking vid 20 pe-vid 200
#我想使用模板文本分析器解析它。
这是我想要得到的目标JSON:
[
{
"subinterfaces": [
{
"interface": "GigabitEthernet1/0/1.1",
"stacking": {
"100": [ "10", "20" ],
"200": [ "30" ]
}
},
{
"interface": "GigabitEthernet1/0/2.1",
"stacking": {
"200": [ "20" ]
}
}
]
}
]我试过这个模板
<group name="subinterfaces">
interface {{ interface | contains('.') }}
<group name="stacking.{{ pevid }}">
qinq stacking vid {{ vid }} pe-vid {{ pevid }}
</group>
# {{ _end_ }}
</group>但它给了我
[
{
"subinterfaces": [
{
"interface": "GigabitEthernet1/0/1.1",
"stacking": {
"100": [
{
"vid": "10"
},
{
"vid": "20"
}
],
"200": {
"vid": "30"
}
}
},
{
"interface": "GigabitEthernet1/0/2.1",
"stacking": {
"200": {
"vid": "20"
}
}
}
]
}
]任何使用“”(管道)应用于的修饰符/函数都不会产生任何效果。
这个问题背后的动机是学习TTP力学。请不要用其他工具发送答案。
发布于 2021-07-14 22:35:06
这是一个有趣的问题,但不存在匹配变量或组函数来满足在一行上定义多个{{ match }}变量时将匹配组合到列表中的要求。存在接合匹配函数,但由于这个特殊原因,它在这里不能工作。
我能想到的最好的就是使用Python进行结果后处理。
例如,该模板使用宏标记定义了post_processing Python函数,并使用output标记传递结果:
<group name="subinterfaces">
interface {{ interface | contains('.') }}
<group name="stacking.{{ pevid }}.{{ vid }}">
qinq stacking vid {{ vid }} pe-vid {{ pevid }}
</group>
# {{ _end_ }}
</group>
<output macro="post_process"/>
<macro>
def post_process(data):
for item in data[0]["subinterfaces"]:
item["stacking"] = {
k: list(v.keys()) for k, v in item["stacking"].items()
}
return(data)
</macro>对subinterfaces组进行了改进,以获得以下结果:
[
[
{
"subinterfaces": [
{
"interface": "GigabitEthernet1/0/1.1",
"stacking": {
"100": {
"10": {},
"20": {}
},
"200": {
"30": {}
}
}
},
{
"interface": "GigabitEthernet1/0/2.1",
"stacking": {
"200": {
"20": {}
}
}
}
]
}
]
]在使用post_processing宏通过输出程序传递上述数据后,结果转换为所需的结构:
[
[
{
"subinterfaces": [
{
"interface": "GigabitEthernet1/0/1.1",
"stacking": {
"100": [
"10",
"20"
],
"200": [
"30"
]
}
},
{
"interface": "GigabitEthernet1/0/2.1",
"stacking": {
"200": [
"20"
]
}
}
]
}
]
]https://stackoverflow.com/questions/68002467
复制相似问题