如何使用Python遍历JSON对象

2024-09-27 07:27:56 发布

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

我从中读取的json文件看起来是这样的,我决定不发布实际的文件,因为它是用于类项目的,而且发布这个文件并不舒服(它是validated):

{ "peoples": [ 
 {blah1 : blah, blah2: blah,blah3 : blah, blah4: blah,blah5 : blah, 
 blah6:blah,blah7 : blah, blah8: blah,blah9 : blah, blah10: blah,}

 {blah1 : blah, blah2: blah,blah3 : blah, blah4: blah,blah5 : blah, 
 blah6:blah,blah7 : blah, blah8: blah,blah9 : blah, blah10: blah,} 
 ]
 }

到目前为止,我在python上的代码是这样的,我不完全确定这是否是针对这种情况编写代码的最佳方法,但它确实部分起作用,我为什么要寻求帮助:

import simplejson  

class People(dict):
   def __init__(self):
    self.tricks = []
    _keys = ['blah1', 'blah2', 'blah3','blah4', 'blah5', 'blah6','blah7', 
      'blah8','blah9','blah10']


   def getJSONdata(self,tricks):
       with open(Dfile.json, 'r') as peopleData:
           dataObject = simplejson.load(peopleData)
           for people in dataObject['peoples']:
               return (people[tricks])

 peep = People()
 peep1 = People()

 print(peep.getJSONdata("blah1"))
 print(peep1.getJSONdata("blah2"))  

我可以使用键访问对象上的任何内容,但无法访问第二个,等等。。。我浏览了多个json和python站点,但都没有真正解决这个问题。任何帮助都将不胜感激。你知道吗

我希望能够平等地访问对象。所以我可以从object1,object2等处得到blah1。。你知道吗


Tags: 文件selfjsonpeopleblahblah5blah4blah3
1条回答
网友
1楼 · 发布于 2024-09-27 07:27:56

我觉得你的设置有点过分了。你知道吗

假设您的JSON文件如下所示:

{"peoples": [
     {"blah8": "blah", "blah2": "blah", "blah4": "blah", "blah3": "blah", "blah9": "blah", "blah7": "blah", "blah1": "blah", "blah6": "blah", "blah5": "blah", "blah10": "blah"}, 
     {"blah8": "blah", "blah2": "blah", "blah4": "blah", "blah3": "blah", "blah9": "blah", "blah7": "blah", "blah1": "blah", "blah6": "blah", "blah5": "blah", "blah10": "blah"}
]}

peoples中的每个对象都应该表示一个人。使用json可以将JSON文件中的数据加载到Python字典中:

import json

dataObject = json.load(open("myjsonfile.json", "r"))

那么,dataObject['peoples']就是人的数组。dataObject['peoples'][0]是第一人称。dataObject['peoples'][1]是第二人称,依此类推。你知道吗

因此,现在如果您要遍历每个人并获取给定键的值:

key = "blah2"
for p in dataObject['peoples']:
    print(p.get("blah2", None))

为每个人打印“blah2”键。如果找不到键,则返回None。这只是一种安全措施,以防你遇到一个没有特定钥匙的人。所以这里的输出应该是:

blah
blah

总的来说,不需要创建对象。您只需加载json数据,然后使用以下函数即可实现此功能:

import json

dataObject = json.load(open("myjsonfile.json", "r"))

def getDataFromPersons(key, persons):
   # build a list of the values from each person with the given key
   return [p.get(key, None) for p in persons]

d = getDataFromPersons("blah2", data['persons'])
print(d)
# blah
# blah

但是,您可能希望能够跟踪数据来自哪个人。在这种情况下,您需要构建字典而不是列表:

def getDataFromPersons(key, persons):
   # build a dictionary where the key is the index of the person in the list
   # and the value is the value for that person at the given key
   return {i:p.get(key, None) for i,p in enumerate(persons)}

这将输出{0: 'blah', 1: 'blah'}。你知道吗

相关问题 更多 >

    热门问题