Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何迭代这个嵌入的JSON“;列表“;用python?_Python_Json - Fatal编程技术网

如何迭代这个嵌入的JSON“;列表“;用python?

如何迭代这个嵌入的JSON“;列表“;用python?,python,json,Python,Json,这里是python新手。我试图迭代每个人的所有JSON“group”对象,但有一些困难。这只是一个部分列表(并非所有用户都有组),因此我需要使用try/catch块,以便没有组列表的用户不会导致提前终止 JSON数据片段: { "people": [ { "person": { "name": "joe", "email": "joe@foo.net", "groups": [ {

这里是python新手。我试图迭代每个人的所有JSON“group”对象,但有一些困难。这只是一个部分列表(并非所有用户都有组),因此我需要使用try/catch块,以便没有组列表的用户不会导致提前终止

JSON数据片段:

{
"people": [
   {

      "person": {
         "name": "joe",
         "email": "joe@foo.net",

         "groups": [
            {
               "name": "office",
               "id": 23
            },

            {
               "name": "mfg",
               "id": 93
            } ]
      },


      "person": {
         "name": "bill",
         "email": "bill@foo.net",

         "groups": [
            {
               "name": "acctg",
               "id": 133
            },

            {
               "name": "mgr",
               "id": 207
            } ]
      } 
   }
]

}
这是我目前的代码:

jdata = json.loads...
for person in jdata['people']:
   for key, val in person.iteritems():
      print "key ", key , " is ", val

      print val["name"]
      print val["email"]

      try:
         for gkey, gval in val["groups"][0].iteritems():
            print "gval: " + gval
      except:
         foo=1     

请注意,我可以通过为gkey…val[“groups”][0]执行
来打印组列表中第0项的列表。iteritems()
但是我真正想要的是迭代每个
人的
列表(一些人属于两个组,其他人10个或更多),因此没有固定长度。我该怎么做?

这就是你想要的吗

>>> for group in j['people'][0]['person']['groups']:
        for k,v in group.items():
            print(k,v)


name acctg
id 133
name mgr
id 207
或者更一般地说:

>>> for person in j['people']:
        for group in person['person']['groups']:
            print('Name : {} --- ID: {}'.format(group['name'], group['id']))


Name : acctg --- ID: 133
Name : mgr --- ID: 207

val[“groups”]
上的
循环使用
。或者这不是您想要的吗?您可以说val.get(“groups”,[]),而不是try/except,并在上面进行迭代。如果那个人没有群组,它将返回一个空列表。谢谢!你展示的第二个例子正是我所需要的。唷!