我知道它已被大量记录,我试图将.read().decode('utf-8')
放在我认为应该去的地方,但我仍然遗漏了一些东西,我不知道还有什么地方可以转。我有一个在Python 2.7中运行良好的脚本,通过获取对象ID来为数据刮取ESRI REST URL。但是,它似乎没有在Python 3中合作。它在第29行连续失败(见下文)。任何帮助将不胜感激。
version = json.loads(webresp.decode('utf-8'))['currentVersion']
我总是一直得到这个错误:
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
main(url, jsonfilelocation, jsonfilename)
File "\\SERVER\Projects\Python\TOUCH\esrirestjson.py", line 73, in main
oids = ESRIJSON().getobjrange(webconn, path)
File "\\SERVER\Projects\Python\TOUCH\esrirestjson.py", line 29, in getobjrange
version = json.loads(webresp.decode('utf-8'))['currentVersion']
File "C:\ArcGISPro\bin\Python\envs\arcgispro-py3\lib\json\__init__.py", line 312, in loads
s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'
答案 0 :(得分:1)
我通过将json.loads()
更改为json.load
并删除了所有decode('utf-8')
来解决了您的错误。现在我遇到了另一个错误,因为你没有在Python 3中正确处理字符串格式。qs
变量需要采用格式"?where=&outFields=*&returnGeometry={}
。格式(变量添加到字符串),这可以节省大量的担忧编码问题。我仍然会在ascii
字符串中出现qs
错误,但希望这会指向正确的方向。 Python 3比2.7好10倍,值得付出努力。