gpt4 book ai didi

python - Python 中的 JSON.loads() ValueError 额外数据

转载 作者:太空宇宙 更新时间:2023-11-04 07:08:39 25 4
gpt4 key购买 nike

我正在尝试从 JSON 提要中读取单个值。以下是提要数据的示例:

{
"sendtoken": "token1",
"bytes_transferred": 0,
"num_retries": 0,
"timestamp": 1414395374,
"queue_time": 975,
"message": "internalerror",
"id": "mailerX",
"m0": {
"binding_group": "domain.com",
"recipient_domain": "hotmail.com",
"recipient_local": "destination",
"sender_domain": "domain.com",
"binding": "mail.domain.com",
"message_id": "C1/34-54876-D36FA645",
"api_credential": "creds",
"sender_local": "localstring"
},
"rejecting_ip": "145.5.5.5",
"type": "alpha",
"message_stage": 3
}
{
"sendtoken": "token2",
"bytes_transferred": 0,
"num_retries": 0,
"timestamp": 1414397568,
"queue_time": 538,
"message": "internal error,
"id": "mailerX",
"m0": {
"binding_group": "domain.com",
"recipient_domain": "hotmail.com",
"recipient_local": "destination",
"sender_domain": "domain.com",
"binding": "mail.domain.com",
"message_id": "C1/34-54876-D36FA645",
"api_credential": "creds",
"sender_local": "localstring"
},
"rejecting_ip": "145.5.5.5",
"type": "alpha",
"message_stage": 3
}

我不能分享实际的 URL,但上面是我运行时显示的大约 150 个结果中的前 2 个

print results

之前

json.loads()

行。

我的代码:

import urllib2
import json

results = urllib2.urlopen(url).read()
jsondata = json.loads(results)

for row in jsondata:
print row['sendtoken']
print row['recipient_domain']

我想要这样的输出

token1
hotmail.com

对于每个条目。

我收到这个错误:

ValueError: Extra data: line 2 column 1 - line 133 column 1 (char 583 - 77680)

我远不是 Python 专家,这是我第一次使用 JSON。我花了很多时间查看 google 和 Stack Overflow,但找不到适合我的特定数据格式的解决方案。

最佳答案

问题是您的数据没有形成 JSON 对象,因此您无法使用 json.loads 对其进行解码。


首先,这看起来是由空格分隔的一系列 JSON 对象。由于您不会告诉我们任何有关数据来源的信息,这实际上只是一个有根据的猜测;希望任何文档或同事或任何告诉您有关此 URL 的内容都能告诉您实际格式是什么。但让我们假设我的有根据的猜测是正确的。

在 Python 中解析 JSON 对象流的最简单方法是使用 raw_decode 方法。像这样:*

import json

def parse_json_stream(stream):
decoder = json.JSONDecoder()
while stream:
obj, idx = decoder.raw_decode(stream)
yield obj
stream = stream[idx:].lstrip()

但是,流中的第二个 JSON 对象也有错误。看这部分:


"message": "internal error,
"id": "mailerX",

"内部错误后缺少"。如果您解决了这个问题,那么上面的函数将迭代两个 JSON 对象。

希望该错误是由于您试图通过重写手动“复制和粘贴”数据造成的。如果它在您的原始源数据中,那么您的问题就大得多;您可能需要从头开始编写一个“损坏的 JSON”解析器,它可以启发式地猜测数据的目的。或者,当然,让生成源代码的人正确生成它。


* 通常,使用 raw_decode 的第二个参数传递起始索引比每次都切掉剩余部分的副本效率更高。但是 raw_decode 无法处理前导空格。仅切片和剥离比编写从给定索引跳过空白的代码要容易一些,但如果这些副本的内存和性能成本很重要,您应该编写更复杂的代码。

关于python - Python 中的 JSON.loads() ValueError 额外数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26620714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com