首页 > 解决方案 > NameError 加载 json 文件

问题描述

我想从 json 文件中加载数据

In [6]: import json
In [7]: position_links = json.loads(position_links.json)

它报告错误:

NameError: name 'position_links' is not defined

我尝试过

position_links = []
position_links = json.loads(position_links.json)
AttributeError: 'list' object has no attribute 'json'

我该如何解决这个问题?

标签: python

解决方案


如果您有一个名为 的文件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要求jsonvalue 的属性[],并且列表没有json属性。因此AttributeError.

如果只是将其放在引号中并将其传递给json.loads,它仍然无法正常工作。该loads函数采用 JSON 文本,而不是文件名,并且该字符串'position_links.json'不是有效的 JSON 文本。因此,您要做的就是将问题从 a 更改NameError为 a JSONDecodeError。要加载文件,您需要load,而不是loads.

如果您只是将其放在引号中并将其传递给json.load,它仍然无法正常工作。该load函数接受一个文件对象,而不是一个文件名,'position_links.json'也不是一个文件对象——它没有像readline,read等方法。所以,你要做的就是把你的问题变成AttributeError寻找这些方法之一。

如果你把它放在引号中并将它传递给open那么你就有一个文件对象,你可以将该文件对象传递给load,现在一切都会正常工作。


推荐阅读