2011-04-10 17 views
17

Say consigo esta línea de JSONJSON-> cadenas en Python

[{u'status': u'active', u'due_date': None, u'group': u'later', u'task_id': 73286}] 

¿Cómo puedo convertir esos valores separados en cadenas? Así que puedo decir

Print Status 

y vuelve

active 
+0

http://docs.python.org/tutorial/datastructures.html –

Respuesta

23

eso no es una "línea de JSON" tal como se recibió de una fuente externa. Parece el resultado de json.loads(external_JSON_string). También Print Status no funcionará; quieres decir print status.

>>> result = [{u'status': u'active', u'due_date': None, u'group': u'later', u'task_id': 73286}] 
>>> print result[0]['status'] 
active 

Esto es lo que una "línea de JSON" se parece a:

>>> import json 
>>> json.dumps(result) 
'[{"status": "active", "due_date": null, "group": "later", "task_id": 73286}]' 
>>> 

EDIT: Si se usa Python 2.5, utilice import simplejson as json en lugar de import json. Hacer que el código un poco más a prueba de futuro al hacer esto:

try: 
    import json 
except ImportError: 
    import simplejson as json 
+0

Entonces, ¿qué? él está mostrando no es una línea de JSON: entonces, ¿qué usa uno para codificar eso? ¿Eso ya es una cadena? ¿Hay algo que deba hacerse para tratarlo como una cadena (es decir, "unicódigo", por ejemplo)? – Praxiteles

0
import simplejson 
_dict = simplejson.loads(json_data) 
for entry in _dict: 
# loop over list 
    print entry.get('status','Failure') 
    # Find key in dict/entry 
+0

me sale este error: El archivo "/Library/Python/2.5/site- packages/simplejson/__ init__.py ", línea 385, en cargas return _default_decoder.decode (s) Archivo" /Library/Python/2.5/site-packages/simplejson/decoder.py ", línea 402, en la decodificación obj , end = self.raw_decode (s, idx = _w (s, 0) .end()) TypeError: string o buffer esperado – HankSmackHood

+0

-1 El "json_data" es el RESULTADO de [simple] json.loads –

4

En primer lugar, que no es JSON como ya se ha señalado - es ya pitón.

Creo que quiere que las claves del dict se transformen automáticamente en variables locales. Esto sería un muy mala idea, aunque en teoría, es posible utilizar locals():

result = [{u'status': u'active', u'due_date': None, u'group': u'later', u'task_id': 73286}] 
for k, v in result[0].items(): 
    locals() [k] = v 
print status # prints active 

Algunos problemas:

  • Sus claves podría sobrescribir algunas variables locales existentes
  • Keys podría ser Unicode , ¿cómo accederías a los nombres de las variables?

Además, como se indica en el python docs, los locales() no se deben modificar.

En resumen: hacerlo de esta manera:

print result[0]['status'] 
+0

imprimir resultados [0] ['xxxx'] funcionó para mi problema c: ¡gracias! – Adjam