example - python json to dict
Python y JSON: los índices de la lista TypeError deben ser enteros y no str (3)
En primer lugar, debe utilizar json.loads
, no json.dumps
. loads
convierte el texto de origen JSON a un valor de Python, mientras que los dumps
van a la inversa.
Después de que arregle eso, basado en el fragmento JSON en la parte superior de su pregunta, readable_json
será una lista, por lo que readable_json[''firstName'']
tiene sentido. La forma correcta de obtener el campo ''firstName''
de cada elemento de una lista es eliminar la línea playerstuff = readable_json[''firstName'']
y cambiar for i in playerstuff:
to for i in readable_json:
Estoy aprendiendo a usar Python y API (específicamente, esta API de la Copa del Mundo, http://www.kimonolabs.com/worldcup/explorer )
Los datos de JSON se ven así:
[
{
"firstName": "Nicolas Alexis Julio",
"lastName": "N''Koulou N''Doubena",
"nickname": "N. N''Koulou",
"assists": 0,
"clubId": "5AF524A1-830C-4D75-8C54-2D0BA1F9BE33",
"teamId": "DF25ABB8-37EB-4C2A-8B6C-BDA53BF5A74D",
"id": "D9AD1E6D-4253-4B88-BB78-0F43E02AF016",
"type": "Player"
},
{
"firstName": "Alexandre Dimitri",
"lastName": "Song-Billong",
"nickname": "A. Song",
"clubId": "35BCEEAF-37D3-4685-83C4-DDCA504E0653",
"teamId": "DF25ABB8-37EB-4C2A-8B6C-BDA53BF5A74D",
"id": "A84540B7-37B6-416F-8C4D-8EAD55D113D9",
"type": "Player"
},
]
Simplemente estoy tratando de imprimir todos los primeros nombres en esta API. Esto es lo que tengo:
import urllib2
import json
url = "http://worldcup.kimonolabs.com/api/players?apikey=xxx"
json_obj = urllib2.urlopen(url).read
readable_json = json.dumps(json_obj)
playerstuff = readable_json[''firstName'']
for i in playerstuff:
print i[''firstName'']
Pero cuando lo ejecuto, aparece el error "... línea 8, en ... Tipo de error: los índices de lista deben ser enteros, no str"
He buscado soluciones por todas partes, pero parece que encuentro preguntas para más preguntas "en profundidad" de la API y todavía no lo entiendo todo, por lo que cualquier ayuda o explicación sobre lo que debo hacer sería increíble. ¡Gracias!
Puedes simplificar tu código hasta
url = "http://worldcup.kimonolabs.com/api/players?apikey=xxx"
json_obj = urllib2.urlopen(url).read
player_json_list = json.loads(json_obj)
for player in readable_json_list:
print player[''firstName'']
Intentabas acceder a un elemento de la lista mediante la sintaxis del diccionario. el equivalente de
foo = [1, 2, 3, 4]
foo["1"]
Puede ser confuso cuando tiene listas de diccionarios y mantener el agrupamiento en orden.
Resolví cambiando
readable_json[''firstName'']
por
readable_json[0][''firstName'']