加载的JSON对象数据成员访问不一致

1 投票
2 回答
676 浏览
提问于 2025-04-15 15:26

我在Django中使用 simplejson 加载一个JSON字符串,代码是这样的:

obj = json.loads('{"name": "joe"}')
person = obj.name

这段代码会报错:

'dict' object has no attribute 'name'

但是当我把 obj 传到视图模板里,并通过 {{ obj.name }} 打印出来时,它却能正常工作!这是为什么呢?

2 个回答

4

json.loads 是一个用来把 json 数据转换成 Python 字典的工具。所以你需要像访问字典那样来获取数据,也就是说用 data['key'] 的方式。

接下来,在 Django 模板的部分,可以查看官方的 Django 模板 文档。

直接引用一下:

从技术上讲,当模板系统遇到一个点(.)时,它会按照以下顺序进行查找:

  • 字典查找
  • 属性查找
  • 方法调用
  • 列表索引查找

所以简单来说,Django 模板允许你用 data.key 的方式来访问字典中的项目。

7

我不太确定Django的部分是怎么运作的,但从json.loads得到的对象是一个Python的dict对象。也就是说,它没有像对象那样的属性,但你可以像访问其他字典一样访问它的键:

obj = json.loads('{"name": "joe"}')
person = obj['name']

撰写回答