【问题标题】:How to manipulate json file in Python如何在 Python 中操作 json 文件
【发布时间】:2016-05-14 19:51:05
【问题描述】:

我想从这里提取数据: http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes

到目前为止,这是我的 python 脚本:

import urllib.request
import json
url =("http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes")
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
result = response.read().decode('utf-8')
print (result)

当我试图操纵结果时,从:

d = json.loads(result)

我收到一条错误消息:“ValueError: No JSON object could be decoded”

我做错了什么?

【问题讨论】:

  • 你能发布print(result)的输出吗?
  • 如果你使用 python 的 requests 库而不是 urllib 来发出 http 请求,你会为自己省去很多麻烦。您应该在帖子中提供 json 数据。
  • 刚刚运行了你的代码,结果是一个包裹在()中的json字符串。去掉括号,然后你应该能够加载json。另外,考虑使用requests 而不是urllib

标签: python json


【解决方案1】:

您的网址/查询错误;您没有从服务器收到有效的 JSON 回复;开头是这样的:

?({"Makes":[{"make_id":"abarth","make_display":"Abarth","make_is_common":"0","make_country":"Italy"},

如果你像这样修改 url:

url = ("http://www.carqueryapi.com/api/0.3/?cmd=getMakes")

它应该工作。至少在那之后它对我有用。

显然,callback=? 的意思是客户端可以插入一个回调方法,该方法通过 json 传递。 IE。您可以让服务器生成可执行的 javascript 而不仅仅是 json。

【讨论】:

    【解决方案2】:

    如果我单击您的 URL,正文中的第一个字符是“?(”。这会破坏您将其输入 JSON 的尝试。您需要预处理数据以去除垃圾。还有垃圾最后。

    顺便说一句,使用 Python 请求库而不是 urllib 可以省去你的麻烦!

    【讨论】:

      猜你喜欢
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 2022-01-05
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      相关资源
      最近更新 更多