2009-03-10 29 views
5

Estoy implementando una fuente de datos de Google usando su Python Library. Me gustaría que la respuesta de la biblioteca para poder ser importado en otro script Python usando el simplejson library.Google Data Source JSON no es válido?

Sin embargo, incluso su example no valida en JSONLint:

{cols: 
    [{id:'name',label:'Name',type:'string'}, 
    {id:'salary',label:'Salary',type:'number'}, 
    {id:'full_time',label:'Full Time Employee',type:'boolean'}], 
rows: 
    [{c:[{v:'Jim'},{v:800,f:'$800'},{v:false}]}, 
    {c:[{v:'Bob'},{v:7000,f:'$7,000'},{v:true}]}, 
    {c:[{v:'Mike'},{v:10000,f:'$10,000'},{v:true}]}, 
    {c:[{v:'Alice'},{v:12500,f:'$12,500'},{v:true}]}]} 

¿Cómo ajustar el simplejson función 'cargas' para importar el JSON anterior Creo que el problema principal es que las claves del objeto no son cadenas.

Preferiría no escribir una expresión regular para convertir las claves en cadenas ya que creo que sería molesto mantener ese código.

Actualmente recibo un error "Esperando nombre de la propiedad: línea 1 columna 1 (char 1)" al intentar importar el json anterior a python con simplejson.

Respuesta

8

Se considera que es JSON no válido sin las claves de cadena.

{id:'name',label:'Name',type:'string'} 

debe ser:

{'id':'name','label':'Name','type':'string'} 

De acuerdo con la página Google Data Source, que están regresando JSON válido. No lo dicen específicamente, pero todos sus ejemplos carecen de comillas en las teclas.

Aquí hay una lista bastante completa de JSON processors for Python que detalla qué formatos admiten y qué tan bien. La mayoría no admite claves que no sean cadenas, , pero parece que demjson la convertirá.

easy_install demjson 
+1

JSON espera cadenas como claves, no pitón diccionarios, por ejemplo, {1: 1, 2: 4} es un diccionario de Python válida pero es un JSON válido. '{id: 1}' y '{" id ": 1}' es un Javascript válido. – jfs

+0

Para ser claro, quise decir que el ejemplo que se muestra no es un diccionario de Python válido. Los números de índice son legales, pero los nombres deben ser cadenas. {id: 1} es JavaScript válido pero Python no válido. – Soviut

Cuestiones relacionadas