在Python中搜索嵌套Json中的键

2024-10-09 00:33:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的Json。你知道吗

我的要求是搜索这个Json,如果'name'等于'Latisha Chase',则获取'id'值

[
  {
    "_id": "5d3121cd001453772160a791",
    "friends": [
      {
        "id": 6,
        "name": "Mcknight Tran"
      },
      {
        "id": 7,
        "name": "Helena Bowers"
      },
      {
        "id": 8,
        "name": "Dorsey Ayala"
      }
    ]
    },
  {
"_id": "5d3121cd838efa513e7dda96",
"friends": [ {
  "friends": [
  {
    "id": 90,
    "name": "w Stark"
  },
  {
    "id": 91,
    "name": "w Jacobs"
  },
  {
    "id": 93,
    "name": "w Garner"
  }
]},
  {
    "id": 10,
    "name": "Amalia Stark"
  },
  {
    "id": 11,
    "name": "Myra Jacobs"
  },
  {
    "id": 12,
    "name": "Norton Garner"
  }
]
}

]

这是我的示例代码。有人能帮我吗。?你知道吗

我在网上尝试了递归代码,但在这里我的示例不起作用。你知道吗

更新: “朋友”没有必要有单一的深度。它可以有朋友里面的朋友。例如:朋友[{朋友[{}]}]


Tags: 代码nameidjson示例朋友friendsstark
2条回答

试试这个

j = [{
    "_id": "5d3121cd001453772160a791",
    "friends": [{
        "id": 6,
        "name": "Mcknight Tran"
      },
      {
        "id": 7,
        "name": "Helena Bowers"
      },
      {
        "id": 8,
        "name": "Dorsey Ayala"
      }
    ]
  },
  {
    "_id": "5d3121cded44d8ba6ad96b78",
    "friends": [{
        "id": 2,
        "name": "June Gilbert"
      },
      {
        "id": 3,
        "name": "Latisha Chase"
      },
      {
        "id": 4,
        "name": "Franco Carlson"
      }
    ]
  },
  {
    "_id": "5d3121cd838efa513e7dda96",
    "friends": [{
        "id": 10,
        "name": "Amalia Stark"
      },
      {
        "id": 11,
        "name": "Myra Jacobs"
      },
      {
        "id": 12,
        "name": "Norton Garner"
      }
    ]
  }
]
for x in j:
  for y in x.get('friends'):
    if y.get('name') == 'Latisha Chase':
      print y.get('id')

使用递归的更通用方法:

def recursive_function(name, l):
    if isinstance(l,list):
        for i in l:
            recursive_function(name, i)
    elif isinstance(l,dict):
        if l.get("name") == name:
            print (l.get("id"))
        for v in l.values():
            if isinstance(v, list) or isinstance(v, dict):
                recursive_function(name, v)

recursive_function("Latisha Chase",json_obj)

结果:

3

相关问题 更多 >

    热门问题