使用pandas.read_json时出现ValueError错误

23

我制作了一个250MB的JSON文件,应该长成这个样子:

[ {"A":"uniquevalue0", "B":[1,2,3]}, 
  {"A":"uniquevalue1", "B":[1]}, 
  {"A":"uniquevalue2", "B":[1,2,3,4]} ]

"B"值可以是变量len>=1。 这个 表示我的JSON格式是有效的。

我调用

df = pandas.read_json('ut1.json', orient = 'records', dtype={"A":str, "B":list})

这里是文档。当读入到pandas dataframe中时,我得到了以下的回溯信息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/.../pandas/io/json.py", line 198, in read_json     
    date_unit).parse()
  File "/.../pandas/io/json.py", line 266, in parse 
    self._parse_no_numpy()
  File "/.../pandas/io/json.py", line 496, in _parse_no_numpy
    loads(json, precise_float=self.precise_float), dtype=None)
ValueError: Unexpected character found when decoding 'true'

想不出哪里出了问题。抛出错误的Python文件没什么用。


代码与给定的JSON文件完美地配合工作。 - falsetru
10个回答

22

我曾经遇到过同样的错误信息,通过使用绝对路径解决了这个问题。

import os
basePath = os.path.dirname(os.path.abspath(__file__))
df = pandas.read_json(basePath + '/ut1.json', orient = 'records', dtype={"A":str, "B":list})

那对我来说起作用了!


1
我尝试过这样做,但是它给了我一个不同的错误:"ValueError: Expected object or value"。我已经尝试使用jsonlint.com验证JSON文件,并且它显示这是一个有效的JSON文件。我不明白问题出在哪里。 - Aayush Agrawal
1
这个方法很好用。但是尝试使用os.path.join(basePath, '/ut1.json')代替字符串拼接。 - rodrigombs
2
@rodrigombs 不是 "/ut1.json",那会导致一个错误... 使用 os.path.join 连接 "ut1.json" - Dexter

6
在我的情况下,路径是错误的。
pandas.read_json 之前加入以下代码以确保检查您的 当前工作目录
import os
print(os.getcwd())

3

我曾经遇到同样的问题,后来发现问题出在从浏览器复制和粘贴文本到我的文件时。这会引入回车符,使得每一行(对于给定的键)都被分成了多行。这就是问题所在。希望这能帮助到某些人!


2

尝试过@learn2day的回答后,我仍然无法得到良好的结果,但是我尝试了以下代码,一切都对我有效。(PS:我打开了一个包含UTF-8字符的JSON文件,其中出现了中文字符)

最初的回答:

pandas.read_json(open("ut1.json", "r", encoding="utf8"))

The encoding="utf8" is the key part of this code.


2

对我来说,问题在于文件开头有一个UTF-8 BOM字符。使用以下编码解决了这个问题:

df = pd.read_json(r'C:\temp\foo.jsonl', lines=True, encoding='utf-8-sig')

1
尝试这个。
df = pd.read_json('file.jsonl', lines=True) #if its a jsonl file

1
今天我调用pandas.read_json('my_file.json')时遇到了“Value Error: Expected object or value”的问题。我之前已经使用相同的文件运行了这段代码,所以看到它今天无法工作非常担心。后来我发现由于某种原因,json文件不在同一个目录下。然后,我通过右键单击文件链接从git下载了该文件。那是个坏主意:(。我猜测json文件没有正确编码,所以即使json文件在同一个目录下,我仍然会收到相同的错误。最后,我删除了json文件,克隆了原始的git repo以获取json文件,并将其放回到同一个目录中。然后,pandas.read_json就起作用了。因此,请首先确保json文件存在于正确的目录中,然后确保文件没有损坏。

0
发布这篇文章是因为上面的答案与我的问题不符。我遇到了这个错误,当我读取一个非常长的字符串文档时,我认为它应该是有效的json格式,但实际上包含了从Python导出为字符串的nan,而应该是"null"才是有效的json。如果该文档不是使用json包创建的,则可能存在故障值,这个错误消息就会指示出来。

0

在 Linux 上运行代码时,我遇到了相同的错误。我意识到给 read_csv 的文件名中 .JSON 的大小写错误。将它改为小写对我有用。


0
  1. 首先确保您的文件存在,当然它是存在的,但对我有效的方法是删除文件并将其重新复制到位置,并在重命名时要小心,然后按以下方式读取文件:

    df_test = pd.read_json('test_file.json',lines=True)

请注意,我遇到了此特定线程中讨论的所有不同错误,最终这个解决方案起作用了,即重新复制文件而不重命名它,然后读取文件(还要确保我的代码和文件共享相同的目录,如果我在读取文件时没有提供绝对路径)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接