python - 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'
我该如何解决这个问题?
解决方案
如果您有一个名为 的文件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
value 的属性[]
,并且列表没有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
,现在一切都会正常工作。
推荐阅读
- linux - 如何在 Arch linux 中重新创建自动生成的用户目录?
- mysql - 为什么邮递员的这个 POST 请求失败?
- mysql - MySQL聚合连接?
- c# - 如何在 WPF 列表的末尾绘制水平线?
- java - 我应该在正则表达式中添加什么来删除出现超过 1 次的标点符号?
- python - 如何在 tensorflow 2x 中使用 Adam().minimize?
- android - 未能解决:Lorg/spongycastle/crypto/engines/AESFastEngine - Android
- ocaml - sedlex 和 ocaml 不会向 $startpos 和 $endpos 发送相同的位置信息
- php - 使按钮批准或不批准php
- python - 使用 scapy 发送 TCP 数据包时出错,未找到参数“计数”