Python 如何从json文件加载对象
我试图从json文件加载简单对象。但我在这方面有错误。下面是我的代码以及db.txt文件中json格式的数据。我正在从其他类调用model.py的getAll()函数 文件:model.pyPython 如何从json文件加载对象,python,json,Python,Json,我试图从json文件加载简单对象。但我在这方面有错误。下面是我的代码以及db.txt文件中json格式的数据。我正在从其他类调用model.py的getAll()函数 文件:model.py import simplejson class Person(object): def __init__(self, first_name = None, last_name = None): self.first_name = first_name self.la
import simplejson
class Person(object):
def __init__(self, first_name = None, last_name = None):
self.first_name = first_name
self.last_name = last_name
def name(self):
return ("%s %s"%(self.first_name, self.last_name))
@classmethod
def getAll(self):
database = open('db.txt', 'r')
result = []
json_list = simplejson.loads(database.read())
print("json list {}".format(json_list))
for item in json_list:
print("item {}".format(item))
print("type of item {}".format(type(item)))
item = simplejson.loads(item)
person = Person(item['first_name'], item['last_name'])
result.append(person)
return result
文件:db.txt
[
{
"first_name":"first name",
"last_name":"last name"
},
{
"first_name":"first name 2",
"last_name":"last name 2"
}
]
错误(输出):
json列表[{'first_name':'first name','last_name':'last name'},{'first_name':'first name 2','last_name':'last name 2'}]
项目{'first_name':'first name','last_name':'last name'}
项目类型
...
...
item=simplejson.loads(项目)
...
...
关键错误:0
simplejson.load(database.read())
一直解析JSON。你不需要在每一个层面上都这么做。由于item
已经是一个dict,您可以立即像dict一样使用它。simplejson.loads(database.read())
一直解析JSON。你不需要在每一个层面上都这么做。由于item
已经是一个dict,您可以立即像dict一样使用它
from ast import literal_eval
with open('db.txt') as file:
text = file.read()
db_list = literal_eval(text)
db_list是一个字典列表,您可以迭代这些字典并以这种方式访问每个字典
db_list是一个字典列表,您可以通过这种方式迭代这些字典并访问每个字典。为什么要执行
item=simplejson.loads(item)
???@juanpa.arrivillaga,因为我想从中提取名字、姓氏并创建对象Person。这没有意义。。。。为什么要将一个dict
传递给.loads
,它需要一个JSON有效的str
。。。。???在任何情况下,这都是您错误的根源。只需使用dict
@juanpa.arrivillaga,那么为这个需求创建json文件的最佳方法是什么呢?json文件就这么好了。您可以直接删除这一行:item=simplejson.loads(item)
,您的代码将按照您的预期工作。我仍然不明白你为什么认为这行是必要的,或者它应该做什么。你为什么要做item=simplejson.loads(item)
?@juanpa.arrivillaga,因为我想提取名字、姓氏并从中创建对象Person。这没有意义。。。。为什么要将一个dict
传递给.loads
,它需要一个JSON有效的str
。。。。???在任何情况下,这都是您错误的根源。只需使用dict
@juanpa.arrivillaga,那么为这个需求创建json文件的最佳方法是什么呢?json文件就这么好了。您可以直接删除这一行:item=simplejson.loads(item)
,您的代码将按照您的预期工作。我仍然不明白为什么您认为这行是必要的,或者它应该做什么。不,这是一个有效的JSON文件,所以使用JSON反序列化器是完全合适的,而且实际上,literal\u eval
对于许多有效的JSON都会失败。Python文本和JSON不等价/不可互换(只有小的子集可以)。不,它是一个有效的JSON文件,因此使用JSON反序列化器是完全合适的,事实上,literal\u eval
对于许多有效的JSON都会失败。Python文本和JSON是不等价的/不可互换的(只能是很小的子集)
from ast import literal_eval
with open('db.txt') as file:
text = file.read()
db_list = literal_eval(text)