Python 如何从json文件加载对象

Python 如何从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

我试图从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.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)