2016-02-08 180 views
0

我有這種格式的JSON。如何打印每個值並進入對象。此外,JSON可以變化,也是名稱,所以我需要一個通用的解決方案。在python中迭代嵌套的json

output = {'name':'StackOverflow', 
     'competitors':[{ 'competitor':'bing', 
          'link':'bing.com'}, 
         { 'competitor':'google', 
          'link':'google.com'}], 
     'acquisition': {'acquired_day': 16, 
         'acquired_month': 12, 
         'acquired_year': 2013, 
         'acquiring_company': {'name': 'Viggle', 
              'permalink': 'viggle'}}} 
+0

澄清:您已經有一本字典,並且您想要打印所有值,包括嵌套字典中的值,但不是鍵?你的例子的預期輸出是什麼? – timgeb

+0

我需要遍歷每個鍵和值,將json中的所有值替換爲其他值。 – user1733735

+0

你必須遍歷你的字典的每個鍵和值。也必須檢查,如果價值再次是字典,然後做同樣的事情。 – Nilesh

回答

1

您可以使用isinstance來檢查是否是字典或列表。像這樣的東西可能會起作用,但我沒有檢查過它。

output = {'name': 'StackOverflow', 
     'competitors': [{'competitor': 'bing', 
         'link': 'bing.com'}, 
         {'competitor': 'google', 
         'link': 'google.com'}], 
     'acquisition': {'acquired_day': 16, 
         'acquired_month': 12, 
         'acquired_year': 2013, 
         'acquiring_company': {'name': 'Viggle', 
              'permalink': 'viggle'}}} 


def traverse(obj): 
    if isinstance(obj, dict): 
     for key, value in obj.iteritems(): 
      print('dict_key', key) 
      traverse(value) 
    elif isinstance(obj, list): 
     for value in obj: 
      traverse(value) 
    else: 
     print('value', obj) 


traverse(output) 
+0

這適用於值,但我會需要鍵以及我需要設置一個新值的值 – user1733735