解析JSON数据时出错



我想根据纬度和经度从Google Earth获取高程数据,但我无法做到这一点。我不知道我做错了什么,但我的代码如下所示。

def getElevation(locations,sensor="true", **elvtn_args):
    elvtn_args.update({
        'locations': locations,
        'sensor': sensor
    })
    url = ELEVATION_BASE_URL
    params =  urllib.parse.urlencode(elvtn_args)
    baseurl = url +"?"+ params;
    req = urllib.request.urlopen(str(baseurl));
    response = simplejson.load(req);

得到的错误是:

Traceback (most recent call last):
  File "D:GISArctoolsElevationChart - Copy.py", line 85, in <module>
    getElevation(pathStr)
  File "D:GISArctoolsElevationChart - Copy.py", line 45, in getElevation
    response = simplejson.load(req);
  File "C:Python32libjson__init__.py", line 262, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:Python32libjson__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "C:Python32libjsondecoder.py", line 351, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: can't use a string pattern on a bytes-like object

感谢您的帮助。

帖子有点晚,但最近遇到了同样的问题。下面的解决方案对我很有效。基本就是Lennart说的。

from urllib import request
import json
req = request.urlopen('https://someurl.net/api')
encoding = req.headers.get_content_charset()
obj = json.loads(req.read().decode(encoding))

在Python 3中,二进制数据(例如http请求的原始响应)存储在bytes对象中。Json/simplejson需要字符串。解决方案是用适当的编码将字节数据解码为字符串数据,您可以在header中找到。

你找到编码:

encoding = req.headers.get_content_charset()

然后通过:

使内容成为字符串:
body = req.readall().decode(encoding)

这个主体可以传递给json加载器。

(另外,请停止将响应称为"req"。这让人很困惑,听起来像是请求,其实不是。)

相关内容

  • 没有找到相关文章

最新更新