簡體   English   中英

使用arbitray深度提取嵌套json數據中的所有鍵

[英]Extract all keys in nested json data with arbitray depth

我有一個json,它只是一個無序轉儲,它由字典,列表和unicode值的混合嵌套在1到10的深度范圍內組成。這是我正在處理的一個粗略簡化示例:

{'name': 'TheDude',
 'age': '19',
 'hobbies': {
         'love': 'eating',
         'hate': 'reading',
         'like': [
                 {'outdoor': {
                         'teamsport': 'soccer',
                        }
                 }
                 ]
        }
  }

我想要以下輸出(基於上述內容):

[name, age, hobbies_love, hobbies_hate, hobbies_like_outdoor_teamsport]

我嘗試了以下代碼:

def printinoice(dictionary,arr):
    for k, v in dictionary.iteritems():
        arr.append(k)
        if isinstance(v, dict):
            for result in printinoice(v,arr):
                arr.append(result)
        elif isinstance(v, list):
            for d in v:
                for result in printinoice(d,arr):
                    arr.append(result)
    return arr

基於此,但到目前為止還沒有運氣。 任何人都對如何使其工作有個好主意?

以下遞歸函數將起作用:

def deep_keys(dct):
   if not isinstance(dct, (dict, list)):
      return ['']
   if isinstance(dct, list):
      return [dk for x in dct for dk in deep_keys(x)]
   return [k+('_'+dk if dk else '') for k, v in dct.items() for dk in deep_keys(v)]

>>> deep_keys(d)
['name', 'age', 'hobbies_love', 'hobbies_hate', 'hobbies_like_outdoor_teamsport']

不為函數參數假定給定類型是最容易的,這樣您就可以沿遞歸傳遞任何嵌套的東西(即list元素和dict值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM