2016-02-08 99 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