es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eres un traductor de español que traduce documentos de tecnología. Traduce lo siguiente al español: “El string json.loads no se está leyendo correctamente desde la API”.

No he tenido suerte encontrando por qué después de ejecutar el siguiente código,

import xmlrpc.client
import json
from tkinter import *
app = Tk()
api = xmlrpc.client.ServerProxy("http://user:pass@localhost:8442/")
listAddress = api.listAddresses()
print (listAddress)
jsonAddresses = json.loads(listAddress)
print (jsonAddresses)

Me dice que el objeto JSON debe ser una cadena. Añadí print (listAddress) ahí para mostrar que de hecho es una cadena en formato JSON y la salida lo imprime justo antes de decirme que necesita ser una cadena. Se muestra aquí:

{'addresses': [{'chan': False, 'address': 'BM-2cXU266jqEXWN9GZ3syVP9dNiWM59z8br8', 'enabled': True, 'stream': 1, 'label': 'unused API address'}, {'chan': False, 'address': 'BM-NB21wfaCzZvmX7BFrat1zSocRuYCMVvQ', 'enabled': True, 'stream': 1, 'label': 'unused API address'}]}
Traceback (most recent call last):
  File "/home/otsudo/Code/part_manager-master/help.py", line 13, in <module>
    jsonAddresses = json.loads(listAddress)
  File "/usr/lib/python3.8/json/__init__.py", line 341, in loads
    raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not dict

Debo estar omitiendo algo aquí. Agradezco toda la ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema en el código es que el método json.loads() espera una cadena como argumento, pero se le ha proporcionado un diccionario.

    Al observar la salida de print(listAddress), se puede ver que listAddress ya es un diccionario con claves y valores en formato JSON. Por lo tanto, no es necesario utilizar el método json.loads() en listAddress.

    En su lugar, el código debería acceder directamente a los valores del diccionario utilizando las claves. Por ejemplo, para obtener la lista de direcciones de listAddress, simplemente se puede usar listAddress['addresses'].

    El código modificado sería:

    import xmlrpc.client
    
    from tkinter import *
    
    app = Tk()
    api = xmlrpc.client.ServerProxy("http://user:pass@localhost:8442/")
    
    listAddress = api.listAddresses()
    
    print(listAddress['addresses'])
    

    Esto imprimirá la lista de direcciones en el formato [{'chan': False, 'address': 'BM-2cXU266jqEXWN9GZ3syVP9dNiWM59z8br8', 'enabled': True, 'stream': 1, 'label': 'unused API address'}, {'chan': False, 'address': 'BM-NB21wfaCzZvmX7BFrat1zSocRuYCMVvQ', 'enabled': True, 'stream': 1, 'label': 'unused API address'}].

    Tenga en cuenta que en el código original se importó el módulo json pero no se utilizó. Por lo tanto, se puede eliminar de las importaciones.

Comments are closed.