我想从json文件加载数据
viewModel
它报告错误:
In [6]: import json
In [7]: position_links = json.loads(position_links.json)
我尝试了
NameError: name 'position_links' is not defined
我该如何解决问题?
答案 0 :(得分:2)
如果有一个名为position_links.json
的文件,则必须(a)使用文件名作为字符串,而不是裸变量,并且(b)使用open
该文件,以便您可以读取它:
with open('position_links.json') as file:
position_links = json.load(file)
如果您想了解代码有什么问题:
position_links.json
,不带引号,只是要求变量json
中具有任何值的position_links
属性。但是该变量中没有 值。您尚未创建任何名为position_links
的东西。因此,NameError
。如果要使用字符串作为文件名,则该字符串必须用引号引起来。
如果仅为[]
创建一个值position_links
,它将仍然无法使用。现在position_links.json
要求提供值json
的{{1}}属性,并且列表没有[]
属性。因此,json
。
如果仅将其用引号引起来并将其传递给AttributeError
,它仍然将不起作用。 json.loads
函数使用JSON文本,而不是文件名,并且字符串loads
不是有效的JSON文本。因此,您要做的就是将问题从'position_links.json'
更改为NameError
。要加载文件,您需要JSONDecodeError
,而不是load
。
如果仅将其放在引号中并将其传递给loads
,它仍然将不起作用。 json.load
函数接受一个文件对象,而不是文件名,而load
不是文件对象-它没有像'position_links.json'
,readline
这样的方法。 ,您所要做的就是将问题更改为read
,以寻找其中一种方法。
如果将其用引号引起来并传递给AttributeError
,则然后您将拥有一个文件对象,并且可以将该文件对象传递给open
,现在所有内容会起作用。