【问题标题】:ValueError: Extra data: while loading JSONValueError:额外数据:加载 JSON 时
【发布时间】:2014-03-01 09:18:53
【问题描述】:

我在加载 JSON 时遇到问题。

response = conn.getresponse()
data = response.read().decode('utf-8')
print ("raw data >> ", data)
data1 = json.loads(data)
print (data1)

给我一​​个错误:

raw data >>  {"Len":"0000000000000376"}{"PipeType":2,"Content":{"ActionType":1,"Data":{"UserID":12,"RoomID":1,"UserData":{"NickName":"Koko","MoreAboutMe":null,"Age":21,"Man":false,"Area":9,"HaveCam":false,"isOldPoll":false,"LoginTime":635292689335460656,"RoomEnter":635292689335460656,"FacebookId":null,"Email":null,"FirstName":null,"LastName":null,"BirthDate":null,"FacebookLink":null,"Rank":-1}}}}{"Len":"0000000000000159"}{"PipeType":2,"Content":{"ActionType":3,"Data":{"Message":"no matter","ColorID":0,"UserID":13,"UserNick":"Jovani","SentDate":null,"Rank":null}}}
Exception in Tkinter callback
...
ValueError: Extra data: line 1 column 26 - line 1 column 587 (char 26 - 587)

有什么想法吗?

谢谢

【问题讨论】:

  • 那不是 JSON。这看起来像是几个 JSON 字符串粘在一起。

标签: python json


【解决方案1】:

json.loads 不处理多个 json 数据。

以下是一种解决方法。

import json
import re

nonspace = re.compile(r'\S')
def iterparse(j):
    decoder = json.JSONDecoder()
    pos = 0
    while True:
        matched = nonspace.search(j, pos)
        if not matched:
            break
        pos = matched.start()
        decoded, pos = decoder.raw_decode(j, pos)
        yield decoded

rawdata = '{"Len":"0000000000000376"}{"PipeType":2}'
for decoded in iterparse(rawdata):
    print(decoded)

输出:

{u'Len': u'0000000000000376'}
{u'PipeType': 2}

【讨论】:

  • 干得好。您过去是否已经遇到过这个问题?
  • @beroe,是的,我做到了。代码来自我之前的回答。 (我不记得是哪一个了)。
  • 太棒了。好的答案,就像现在一样。有趣的是,像这样的常见问题在那种情况下被视为“离题”。
  • 谢谢,看起来好多了
  • @user1641071,如果您还有其他问题,请单独发布一个问题。
猜你喜欢
  • 2014-12-24
  • 2016-11-23
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2021-04-04
相关资源
最近更新 更多