Estoy usando google API de geocodificación para probar el siguiente código en Python usando Python 3.5. Pero recibir el siguiente error. El se copia el código de ejemplo de código de Coursera. Suponemos que será capaz de probar cualquier tipo de ubicaciones. Por ejemplo: Ann Arbor, MI

Cualquier idea acerca de por qué tengo el error cuando carga JSON código:

elevar JSONDecodeError(«Esperando valor», s, a errar.valor) de Ninguno >JSONDecodeError: se Esperaba valor

estos son los códigos:

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))
InformationsquelleAutor Gavin | 2016-01-03

2 Comentarios

  1. 2

    Así, he tenido que modificar el código para que se ejecute. Estoy usando Python 3.4.3 en Ubuntu 14.04.

    #import urllib  
    import urllib.parse
    import urllib.request

    He recibido un mensaje de error similar:

    [email protected]:~/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)

    Básicamente, en lugar de tratar de decodificar la cadena json válido, estamos tratando de decodificar el Python ‘Ninguno’ valor, que no es válido json. Trate de parche en el ejemplo de código siguiente. Ejecutar primero una vez que compruebe que el simple objeto json ‘{}’ va a trabajar. A continuación, intente cada uno de los diferentes «possible_json_string’ uno por uno.

    #...
    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)

    Fuente

  2. 5

    El error surge porque los «datos» es de tipo bytes para que usted tiene que decodificar en una cadena antes de usar json.loads para convertirlo en un objeto json. Así, para resolver el problema:

    uh = urllib.request.urlopen(url)
    data = uh.read()
    print ('Retrieved',len(data),'characters')
    
    js = json.loads(data.decode("utf-8"))

    También, str(de datos) en el código compartir trabajará en Python 2.x pero no en Python 3.x porque str() no gira de bytes en una cadena de 3.x.

Dejar respuesta

Please enter your comment!
Please enter your name here