Python 错误加载 JSON 代码 google API
Python error load JSON code of google API
我正在使用 google 地理编码 API 来测试以下 Python3.5 代码,但收到以下错误。
raise JSONDecodeError("Expecting value", s, err.value) from None >JSONDecodeError: Expecting value
代码如下:
import urllib
import json
serviceurl = 'http://maps.googleapis.com/maps/api/geocode/json?'
while True:
address = input('Enter location: ')
if len(address) < 1 : break
url = serviceurl + urllib.parse.urlencode({'sensor':'false',
'address': address})
print ('Retrieving', url)
uh = urllib.request.urlopen(url)
data = uh.read()
print ('Retrieved',len(data),'characters')
js = json.loads(str(data))
知道我为什么会出错。
因此,我不得不将您的代码修改为 运行。我在 Ubuntu 14.04 上使用 Python 3.4.3。
#import urllib
import urllib.parse
import urllib.request
我收到了类似的错误:
heyandy889@laptop:~/src/test$ python3 help.py
Enter location: MI
Retrieving http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=MI
Retrieved 1405 characters
Traceback (most recent call last):
File "help.py", line 18, in <module>
js = json.loads(str(data))
File "/usr/lib/python3.4/json/__init__.py", line 318, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.4/json/decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.4/json/decoder.py", line 361, in raw_decode
raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)
基本上,我们不是尝试解码有效的 json 字符串,而是尝试解码 Python 'None' 值,这是无效的 json。尝试在以下示例代码中进行修补。 运行 首先 double-check 最简单的 json 对象“{}”将起作用。然后,一个一个地尝试每个不同的'possible_json_string'。
#...
print ('Retrieved',len(data),'characters')
#possible_json_string = str(data) #original error
possible_json_string = '{}' #sanity check with simplest json
#possible_json_string = data #why convert to string at all?
#possible_json_string = data.decode('utf-8') #intentional conversion
print('possible_json_string')
print(possible_json_string)
js = json.loads(possible_json_string)
错误的产生是因为"data"是bytes类型,所以你必须在使用json.loads
把它变成一个json对象之前把它解码成一个字符串。所以解决问题:
uh = urllib.request.urlopen(url)
data = uh.read()
print ('Retrieved',len(data),'characters')
js = json.loads(data.decode("utf-8"))
此外,您共享的代码中的 str(data) 将在 Python 2.x 中工作,但在 Python 3.x 中不起作用,因为 str() 不会转字节到 3.x.
中的字符串
查看错误:
"raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Expecting value"
它说我在应该得到东西的时候得到了 None。
在调用 json.loads()
之前检查 None 的数据变量。
if data == None or data == '':
print('I got a null or empty string value for data in a file')
else:
js = json.loads(str(data))
我正在使用 google 地理编码 API 来测试以下 Python3.5 代码,但收到以下错误。
raise JSONDecodeError("Expecting value", s, err.value) from None >JSONDecodeError: Expecting value
代码如下:
import urllib
import json
serviceurl = 'http://maps.googleapis.com/maps/api/geocode/json?'
while True:
address = input('Enter location: ')
if len(address) < 1 : break
url = serviceurl + urllib.parse.urlencode({'sensor':'false',
'address': address})
print ('Retrieving', url)
uh = urllib.request.urlopen(url)
data = uh.read()
print ('Retrieved',len(data),'characters')
js = json.loads(str(data))
知道我为什么会出错。
因此,我不得不将您的代码修改为 运行。我在 Ubuntu 14.04 上使用 Python 3.4.3。
#import urllib
import urllib.parse
import urllib.request
我收到了类似的错误:
heyandy889@laptop:~/src/test$ python3 help.py
Enter location: MI
Retrieving http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=MI
Retrieved 1405 characters
Traceback (most recent call last):
File "help.py", line 18, in <module>
js = json.loads(str(data))
File "/usr/lib/python3.4/json/__init__.py", line 318, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.4/json/decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.4/json/decoder.py", line 361, in raw_decode
raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)
基本上,我们不是尝试解码有效的 json 字符串,而是尝试解码 Python 'None' 值,这是无效的 json。尝试在以下示例代码中进行修补。 运行 首先 double-check 最简单的 json 对象“{}”将起作用。然后,一个一个地尝试每个不同的'possible_json_string'。
#...
print ('Retrieved',len(data),'characters')
#possible_json_string = str(data) #original error
possible_json_string = '{}' #sanity check with simplest json
#possible_json_string = data #why convert to string at all?
#possible_json_string = data.decode('utf-8') #intentional conversion
print('possible_json_string')
print(possible_json_string)
js = json.loads(possible_json_string)
错误的产生是因为"data"是bytes类型,所以你必须在使用json.loads
把它变成一个json对象之前把它解码成一个字符串。所以解决问题:
uh = urllib.request.urlopen(url)
data = uh.read()
print ('Retrieved',len(data),'characters')
js = json.loads(data.decode("utf-8"))
此外,您共享的代码中的 str(data) 将在 Python 2.x 中工作,但在 Python 3.x 中不起作用,因为 str() 不会转字节到 3.x.
中的字符串查看错误:
"raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Expecting value"
它说我在应该得到东西的时候得到了 None。
在调用 json.loads()
之前检查 None 的数据变量。
if data == None or data == '':
print('I got a null or empty string value for data in a file')
else:
js = json.loads(str(data))