У меня есть следующее json
:
{
"pfe-statistics" : [
{
"pfe-traffic-statistics" : [
{
"pfe-input-packets" : [
{
"data" : "3895887"
}
],
"input-pps" : [
{
"data" : "0"
}
],
"pfe-output-packets" : [
{
"data" : "1114541"
}
],
"output-pps" : [
{
"data" : "0"
}
]
}
],
"pfe-local-traffic-statistics" : [
{
"pfe-input-packets" : [
{
"data" : "3893502"
}
],
"pfe-output-packets" : [
{
"data" : "1114541"
}
],
"software-input-control-drops" : [
{
"data" : "0"
}
],
"software-input-high-drops" : [
{
"data" : "0"
}
],
"software-input-medium-drops" : [
{
"data" : "0"
}
],
"software-input-low-drops" : [
{
"data" : "0"
}
],
"software-output-low-drops" : [
{
"data" : "0"
}
],
"hardware-input-drops" : [
{
"data" : "0"
}
]
}
],
"pfe-local-protocol-statistics" : [
{
"hdlc-keepalive-count" : [
{
"data" : "0"
}
],
"atm-oam-count" : [
{
"data" : "0"
}
],
"fr-lmi-count" : [
{
"data" : "0"
}
],
"ppp-lcp-ncp-count" : [
{
"data" : "0"
}
],
"ospf-hello-count" : [
{
"data" : "0"
}
],
"ospf3-hello-count" : [
{
"data" : "0"
}
],
"rsvp-hello-count" : [
{
"data" : "0"
}
],
"ldp-hello-count" : [
{
"data" : "0"
}
],
"bfd-count" : [
{
"data" : "0"
}
],
"isis-iih-count" : [
{
"data" : "0"
}
],
"lacp-count" : [
{
"data" : "0"
}
],
"arp-count" : [
{
"data" : "0"
}
],
"ether-oam-count" : [
{
"data" : "0"
}
],
"unknown-count" : [
{
"data" : "0"
}
]
}
],
"pfe-hardware-discard-statistics" : [
{
"timeout-discard" : [
{
"data" : "0"
}
],
"truncated-key-discard" : [
{
"data" : "0"
}
],
"bits-to-test-discard" : [
{
"data" : "0"
}
],
"data-error-discard" : [
{
"data" : "0"
}
],
"stack-underflow-discard" : [
{
"data" : "0"
}
],
"stack-overflow-discard" : [
{
"data" : "0"
}
],
"bad-route-discard" : [
{
"data" : "0"
}
],
"nexthop-discard" : [
{
"data" : "0"
}
],
"invalid-iif-discard" : [
{
"data" : "0"
}
],
"info-cell-discard" : [
{
"data" : "0"
}
],
"fabric-discard" : [
{
"data" : "0"
}
]
}
],
"pfe-chip-statistics" : [
{
"input-checksum" : [
{
"data" : "0"
}
],
"output-mtu" : [
{
"data" : "0"
}
]
}
]
}
]
}
Я хочу сгенерировать следующее:
{
"pfe-statistics" :
{
"pfe-traffic-statistics" :
{
"pfe-input-packets" : "56601136",
"input-pps" : "30",
"pfe-output-packets" : "71427636",
"output-pps" : "28",
"pfe-fabric-input" : "0",
"pfe-fabric-input-pps" : "0",
"pfe-fabric-output" : "0",
"pfe-fabric-output-pps" : "0"
},
"pfe-local-traffic-statistics" :
{
"pfe-input-packets" : "56226309",
"pfe-output-packets" : "142458974",
"software-input-control-drops" : "0",
"software-input-high-drops" : "0",
"software-input-medium-drops" : "0",
"software-input-low-drops" : "0",
"software-output-low-drops" : "0",
"hardware-input-drops" : "0"
},
"pfe-local-protocol-statistics" :
{
"hdlc-keepalive-count" : "0",
"atm-oam-count" : "0",
"fr-lmi-count" : "0",
"ppp-lcp-ncp-count" : "0",
"ospf-hello-count" : "0",
"ospf3-hello-count" : "0",
"rsvp-hello-count" : "0",
"ldp-hello-count" : "0",
"bfd-count" : "49316136",
"isis-iih-count" : "0",
"lacp-count" : "0",
"arp-count" : "433208",
"ether-oam-count" : "0",
"unknown-count" : "0"
},
"pfe-hardware-discard-statistics" :
{
"timeout-discard" : "0",
"truncated-key-discard" : "0",
"bits-to-test-discard" : "0",
"data-error-discard" : "0",
"tcp-header-error-discard" : "0",
"stack-underflow-discard" : "0",
"stack-overflow-discard" : "0",
"bad-route-discard" : "0",
"nexthop-discard" : "0",
"invalid-iif-discard" : "0",
"info-cell-discard" : "0",
"fabric-discard" : "0"
},
"pfe-chip-statistics" :
{
"input-checksum" : "0",
"output-mtu" : "0"
}
}
}
Я написал следующую функцию, но не могу заставить ее работать 100 процентов:
d = {}
l = []
def compact_json(df):
for k, v in df.items():
if isinstance(v, list):
print("list")
print(k)
if "data" not in v[0].keys():
val = v[0].keys()
if val not in l:
l.append(k)
compact_json(v[0])
#d.update(k)
if isinstance(v[0], dict):
print("dict")
if "data" in v[0].keys():
print("if data yes")
print(k, v[0]["data"])
d1 = {k: v}
#d[val] = v[0]["data"]
d[k] = v[0]["data"]
else:
print("else no data")
print(v[0])
compact_json(v[0])
compact_json(df)
print("==============")
print(d)
Я могу печатать только листья, но не ветви. Обратите внимание, что я хочу сделать его универсальным для нескольких json
, поэтому вложенные глубины могут быть разными во всех формах.