加载的JSON对象数据成员访问不一致
我在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']