当前位置: 首页 > 知识库问答 >
问题:

从文件中读取JSON

公良照
2023-03-14

一个看起来简单、容易的陈述却让我犯了一些错误。

我有一个名为strings.json的JSON文件,如下所示:

"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ...,
            {"-name": "address", "#text": "Address"}]

我想阅读JSON文件,目前仅此而已。我发现了这些语句,但它不起作用:

import json
from pprint import pprint

with open('strings.json') as json_data:
    d = json.loads(json_data)
    json_data.close()
    pprint(d)

控制台上显示的错误如下:

Traceback (most recent call last):
  File "/home/.../android/values/manipulate_json.py", line 5, in <module>
    d = json.loads(json_data)
  File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
[Finished in 0.1s with exit code 1]

如果我使用<code>json。加载而不是<code>json。加载,我得到以下错误:

Traceback (most recent call last):
  File "/home/.../android/values/manipulate_json.py", line 5, in <module>
    d = json.load(json_data)
  File "/usr/lib/python2.7/json/__init__.py", line 278, in load
    **kw)
  File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 369, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 829 column 1 - line 829 column 2 (char 18476 - 18477)
[Finished in 0.1s with exit code 1]

共有3个答案

江雅懿
2023-03-14

问题是使用 with 语句:

with open('strings.json') as json_data:
    d = json.load(json_data)
    pprint(d)

该文件将被隐式关闭。不需要调用<code>json_data。再次关闭()。

谢选
2023-03-14

这是一份对我来说很好的代码副本,

import json

with open("test.json") as json_file:
    json_data = json.load(json_file)
    print(json_data)

与数据

{
    "a": [1,3,"asdf",true],
    "b": {
        "Hello": "world"
    }
}

您可能需要包装json。使用try-catch加载行,因为无效的JSON将导致stacktrace错误消息。

吕飞翼
2023-03-14

< code>json.load()方法(在“load”中没有“s”)可以直接读取文件:

import json

with open('strings.json') as f:
    d = json.load(f)
    print(d)

您正在使用json.loads()方法,该方法仅用于字符串参数

使用< code>json.loads得到的错误是一个完全不同的问题。在这种情况下,该文件中有一些无效的JSON内容。为此,我建议通过JSON验证器运行该文件。

也有解决JSON的方法,比如我如何自动修复一个无效的JSON字符串?.

 类似资料:
  • 问题内容: 只是因为一个简单,易于表达的陈述使我的脸上有些错误,所以我有点头疼。 我有一个名为strings.json的json文件,如下所示: 我现在想读取json文件。我发现了以下这些语句,但是不起作用: 控制台上显示的错误是这样的: 已编辑 从更改为 并得到了这个: 问题答案: 该方法(“ load”中没有“ s”)可以直接读取文件: 您正在使用方法,该方法仅用于 字符串 参数。 编辑:新消

  • 我有一个名为Strings.json的json文件,如下所示: 我想读取json文件,现在仅此而已。我发现了这些说法,但它不起作用: 控制台上显示的错误是: 已编辑 从更改为 得到了这个:

  • 问题内容: 我有点头疼,只是因为一个简单,易于表达的陈述使我的脸上有些错误。 我有一个名为的文件,如下所示: 我现在想读取文件。我发现了以下这些语句,但是不起作用: 控制台上显示的错误是这样的: 已编辑 从更改为 并得到了: 问题答案: 该方法( 中没有 )可以直接读取文件: 你正在使用方法,该方法仅用于字符串参数。 编辑:新消息是一个完全不同的问题。在这种情况下,该文件中存在一些无效的。为此,我

  • 问题内容: 我开发了一个应用程序,可以从用户选择的文件夹中读取文件。它显示每个文件中有多少行代码。我只希望Java文件显示在文件选择器(扩展名为.java的文件)中。下面是我的代码: 我也进行了编辑,但是仍然无法正常工作,请告知请告知如何仅读取扩展名为.java的文件,换句话说,请仅从文件夹中读取java文件,请告知 问题答案: 您需要一个FilenameFilter。这应该为您工作:

  • 问题内容: 我有一个包含多个词典的文件,如下所示: 或这个: 换句话说,每个词典中每个键的顺序都不相同。 我的问题: 最好的阅读本词典的方式是什么,以便无论顺序如何都可以调用Date,GenName和Segment?那可能吗? 请注意…这不是来自json文件。如果字典的构造不正确,我确定可以修改生成此输出的脚本。 问题答案: 正如您在评论中提到的,您要自己创建字典,因此以痛苦的格式存储字典并不是一

  • 问题内容: 我正在尝试使用该模块从python脚本读取json文件。经过一番谷歌搜索后,我发现以下代码: json文件的路径和名称在哪里。我收到以下错误: 问题答案: 该代码用作变量名。它将阴影您导入的模块引用。为变量使用其他名称。 除此之外,代码在接受字符串的同时传递文件对象。 传递文件内容: 或使用接受类似文件的对象。