2012-02-08 18 views
18

He estado escribiendo un script de Python para analizar la información de JSON desde la API de Soundcloud, y me preguntaba cuáles son las "u" cuando uso json.loads (val) y cómo almacenar la información de JSON en un objeto sin el u?¿Qué son los u cuando uso json.loads?

es decir, ¿por qué hay en este u es:

>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') 
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}] 

están en la sección "La decodificación JSON" aquí para entender lo que quiero decir más:

http://docs.python.org/library/json.html

Gracias!

+0

Otro post útil: http://stackoverflow.com/questions/13940272/python-json-loads-returns-items-prefixing-with-u –

Respuesta

7

los u' s están ahí para indicar que una cadena Unicode se supone que debe ser creado.

Es una mierda que json.dump convierte cadenas a cadenas Unicode y no deja rastro de haber hecho eso, porque entonces json.load no puede convertir de nuevo.

Convertir en objetos de cadena, utilice PyYAML:

>>> import yaml 
>>> yaml.load('["foo", {"bar":["baz", null, 1.0, 2]}]') 
>>> ['foo', {'bar': ['baz', None, 1.0, 2]}] 

Pero cuidado! Si por alguna razón usted json.dump ed un objeto que contiene cadenas de objetos y cadenas Unicode, yaml cargarán todo como cadenas de objetos (aunque eso es json.dump 's culpa realmente)