2009-03-10 7 views
5

Sto implementando un'origine dati di Google utilizzando il loro Python Library. Vorrei che la risposta dalla libreria per poter essere importati in un altro script Python utilizzando il simplejson library.JSON Data Source di Google non valido?

Tuttavia, anche la loro example non convalida in 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}]}]} 

Come faccio a modificare la simplejson funzione 'carichi' per importare il JSON sopra? Penso che il problema principale sia che le chiavi dell'oggetto non sono stringhe.

Preferisco non scrivere un'espressione regolare per convertire le chiavi in ​​stringhe poiché penso che tale codice sarebbe noioso da mantenere.

Attualmente sto ottenendo un errore "Expecting property name: line 1 column 1 (char 1)" quando si tenta di importare il json precedente in python con simplejson.

risposta

8

È considerato come JSON non valido senza le chiavi stringa.

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

deve essere:

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

Secondo la pagina Google Data Source, che stanno tornando JSON valido. Non lo dicono esplicitamente, ma tutti i loro esempi mancano di citazioni sui tasti.

Di seguito è riportato un elenco abbastanza completo di JSON processors for Python che descrive in dettaglio i formati supportati e quanto bene. La maggior parte non supporta le chiavi non stringa, ma sembra che demjson la convertirà.

easy_install demjson 
+1

JSON aspetta stringhe come chiavi, non pitone dizionari esempio, {1: 1, 2: 4} è un dizionario Python valido, ma si tratta di un JSON valido. '{id: 1}' e '{" id ": 1}' è un Javascript valido. – jfs

+0

Per essere chiari, volevo dire che l'esempio mostrato non è un dizionario python valido. I numeri indice sono legali, ma tutti i nomi devono essere stringhe. {id: 1} è Javascript valido ma Python non valido. – Soviut

Problemi correlati