Этот код не предполагает структуру входного объекта, obj
(это может быть словарь или список):
obj = {
"Id": 1,
"RESULT": [
{
"Check": {
"checkinstance": {
"ObjectId": 2,
"Class": "Base"
}
},
"Class": "Base"
},
{
"ObjectId": 2,
"Class": "Base",
"Start": {}
},
{
"Display": {
"part": {
"Class": "Base",
"ObjectId": [
[
"Value is 1"
],
""
]
},
"load": {
"ObjectId": 3,
"Class": "Base"
}
},
"Class": "Base"
},
{
"ObjectId": 2,
"Class": "Base",
"Stop": {}
}
]
}
def filter(obj):
if isinstance(obj, list):
for item in obj:
filter(item)
elif isinstance(obj, dict):
if "ObjectId" in obj:
print(obj["ObjectId"])
for v in obj.values():
if isinstance(v, (list, dict)):
filter(v)
filter(obj)
Отпечатки:
2
2
[['Value is 1'], '']
3
2
Python Демо
Если вы не хотите печатать значения, а вместо этого накапливаете их в списке, то:
def filter2(obj):
if isinstance(obj, list):
for item in obj:
yield from filter2(item)
elif isinstance(obj, dict):
if "ObjectId" in obj:
yield obj["ObjectId"]
for v in obj.values():
if isinstance(v, (list, dict)):
yield from filter2(v)
print(list(filter2(obj)))
Печать:
[2, 2, [['Value is 1'], ''], 3, 2]
Pyhon Demo