查看: 1779|回复: 3

ValueError: Extra data: line 88 column 2 - line 50607 column 2 (char 3077 - 1...

[复制链接]

11

主题

80

帖子

199

积分

注册会员

Rank: 2

积分
199
发表于 2018-9-18 17:43:03 | 显示全部楼层 |阅读模式
本帖最后由 强人锁男 于 2018-9-18 17:46 编辑

我从JSON文件“new.json”获取一些数据,我想过滤一些数据并将其存储到一个新的JSON文件中。这是我的代码:
import json
with open('new.json') as infile:
    data = json.load(infile)
for item in data:
    iden = item.get["id"]
    a = item.get["a"]
    b = item.get["b"]
    c = item.get["c"]
    if c == 'XYZ' or  "XYZ" in data["text"]:
        filename = 'abc.json'
    try:
        outfile = open(filename,'ab')
    except:
        outfile = open(filename,'wb')
    obj_json={}
    obj_json["ID"] = iden
    obj_json["VAL_A"] = a
    obj_json["VAL_B"] = b
我收到一个错误,追溯是:
  File "rtfav.py", line 3, in <module>
    data = json.load(infile)
  File "/usr/lib64/python2.7/json/__init__.py", line 278, in load
    **kw)
  File "/usr/lib64/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.7/json/decoder.py", line 369, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 88 column 2 - line 50607 column 2 (char 3077 - 1868399)
有人能帮我吗?
回复

使用道具 举报

10

主题

72

帖子

180

积分

注册会员

Rank: 2

积分
180
发表于 2018-9-18 17:43:52 | 显示全部楼层
正如您在以下示例中所看到的,json.loads(和json.load)不会解码多个json对象。
>>> json.loads('{}')
{}
>>> json.loads('{}{}') # == json.loads(json.dumps({}) + json.dumps({}))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\json\__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 368, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 3 - line 1 column 5 (char 2 - 4)
如果要转储多个字典,将它们包装在列表中,请转储列表(而不是多次转储字典)
>>> dict1 = {}
>>> dict2 = {}
>>> json.dumps([dict1, dict2])
'[{}, {}]'
>>> json.loads(json.dumps([dict1, dict2]))
[{}, {}]
回复

使用道具 举报

9

主题

74

帖子

185

积分

注册会员

Rank: 2

积分
185
发表于 2018-9-18 17:44:25 | 显示全部楼层
我是否可以建议您不必将所有推文打包到列表中然后执行json.dumps。您可以随时写入文件,然后使用以下命令加载它们:
tweets = []
for line in open('test.txt', 'r'):
    tweets.append(json.loads(line))
这样您就不必存储中间python对象。只要你为每次写入调用写一个完整的推文,这应该有效。
回复

使用道具 举报

10

主题

82

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2018-9-18 17:45:22 | 显示全部楼层
如果您的JSON文件不仅仅是1个JSON记录,也可能发生这种情况。JSON记录如下所示:
[{"some data": value, "next key": "another value"}]
它用括号[]打开和关闭,括号内是大括号{}。可以有很多对括号,但它们都以一个紧密的括号结束]。如果您的json文件包含多个:
[{"some data": value, "next key": "another value"}]
[{"2nd record data": value, "2nd record key": "another value"}]
然后loads()将失败。
我用我自己的文件验证了这个失败。
import json

guestFile = open("1_guests.json",'r')
guestData = guestFile.read()
guestFile.close()
gdfJson = json.loads(guestData)
这是有效的,因为1_guests.json有一个记录[]。我使用all_guests.json的原始文件有6条由换行符分隔的记录。我删除了5条记录(我已经检查过用括号进行书签)并以新名称保存文件。然后load语句工作。
错误是
   raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 2 column 1 - line 10 column 1 (char 261900 - 6964758)
PS。我用的是单词record,但那不是官方名称。此外,如果你的文件有像我这样的换行符,你可以循环遍历它,将一条记录一次加载到一个json变量中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表