Tengo un problema con mi código de Python. He fusionado con éxito múltiples archivos json con python. El código json de cada archivo está en un dict python. Cuando quiero usar esos datos, solo me muestra el nombre del objeto, no el valor.
Este es el código que agrega el código de todos los archivos json dentro de un dict python:
result = []
for f in glob.glob("jsons/*.json"):
with open(f, "rb") as infile:
result.append(json.load(infile))
Después de eso, me gustaría mostrar todas las ID de todos los informes de todos los archivos json:
for files in result:
for reports in files["reports"]:
print reports["id"]
Pero recibo el mensaje de error:
Traceback (most recent call last):
File "app.py", line 71, in <module>
print reports["id"]
TypeError: string indices must be integers
Cuando elimino ["id"], me muestra una lista de todos los nombres de informe (1,2,3, ...) pero no el informe completo con objetos y valores. Solo los nombres de los informes.
Aquí está el código json:
{
"reports": {
"1": {
"id": "123"
},
"2": {
"id": "122"
},
"3": {
"id": "121"
}
}
},
{
"reports": {
"4": {
"id": "120"
},
"5": {
"id": "119"
},
"6": {
"id": "118"
}
}
},
...
3 respuestas
for reports in files["reports"]:
files["reports"]
es un diccionario, y iterar sobre un diccionario solo vinculará las claves de ese diccionario, y no sus valores. Entonces reports
será "1"
y luego "2"
etc.
Si desea que reports
esté vinculado al valor del diccionario {"id": "123"}
en lugar de la clave de cadena, especifique esto con el método values
:
for reports in files["reports"].values():
Esos son lists
, no matrices.
De todos modos, tenemos un list
de dicts
anidado, y queremos obtener todos los valores correspondientes a las teclas id
en el dicts
más interno.
Puede hacerlo con una comprensión list
, de la siguiente manera:
[v['id'] for file in files for v in file['reports'].values()]
En correlación con las respuestas anteriores, su json se convirtió en un diccionario, al igual que otros formatos de json hacen lo siguiente. Agregar el método de "valores" o cambiar la iteración a (python3)
for files in result:
for k,v in results.items():
print(k, v)
JSON ----- PYTHON
Objeto ----- dict
Matriz ----- lista
cadena ----- unicode
número (int) ----- int, largo
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.