2012-04-03 24 views
6

MODIFICA:entry.content.$t è il campo errato per accedere alle singole celle. entry.gsx $ [intestazione colonna cellulare] è il metodo corretto. Mi scuso e grazie per aver contribuito a risolvere questo.Parse JSON dal foglio di calcolo Google

domanda originale:

sto cercando di analizzare JSON data from a Google Spreadsheet. Il problema è che il campo delle voci restituisce una stringa che è un'intera riga del foglio di calcolo, ma appare come un oggetto non valido. In che modo altre persone analizzano questi dati? Ecco ciò che il nodo del contenuto appare come:

"content": 
{ 
    "type" :"text", 
    "$t"  :"location: 780 Valencia St San Francisco, CA 94110, 
       phonenumber: (555) 555-5555, 
       website: http://www.780cafe.com, 
       latitude: 37.760505, 
       longitude: -122.421447" 
}, 

guardare con attenzione, il campo $t restituisce una intera stringa che è una riga del foglio di calcolo di Google. Quindi, restituisce una stringa: location: 780 Valencia St San Francisco, CA 94110, phonenumber: (555) 555-5555...

Ulteriore aggravamento di questo problema è che alcune celle del foglio di calcolo hanno virgole (come indirizzi) che non sono sfuggite o quotate. Qualcosa di simile

jQuery.parseJSON(entry.content.$t) 

o

eval('('+ entry.content.$t + ')') 

genera un errore. Suppongo che l'espressione regolare sia un'opzione, ma spero che altri possano averlo risolto in un modo più elegante. Grazie per l'aiuto!

+1

Qual è la richiesta che si usa per ottenere i dati JSON? Usi le celle del tipo o l'elenco dei tipi? (vedi http://code.google.com/apis/gdata/samples/spreadsheet_sample.html) – HBP

+1

Guardando agli esempi, penso che stai facendo qualcosa di sbagliato - sia nel modo in cui stai richiedendo il JSON o nei dati del foglio di calcolo stesso. Da quello che posso vedere, non si dovrebbe ricevere un'intera riga come campo di testo; dovresti ottenere una combinazione di oggetti e matrici nei dati per indicare righe e colonne. –

+0

Doh! L'avevo capito. Avete capito bene. Stavo estraendo il nodo sbagliato Apparentemente, restituisce singoli oggetti per ogni cella. Errore mio. Grazie mille per aver catturato questo. – jrue

risposta

1

Il "testo" all'interno dell'attributo $t non è JSON. Secondo la documentazione, i nodi di testo sono transfomessi negli attributi $t, quindi non si può fare affidamento su alcunché in cui sia presente JSON correttamente formattato.

Suggerirei invece di usare un'espressione regolare, anche se ti avvertirò che per analizzare quell'output occorreranno alcune cose fantasiose. Finirai per utilizzare un'affermazione dato che non puoi dividere le virgole: dovrai cercare (\w+): ma per trovare l'elemento successivo, dovrai prendere tutto fino a un altro corrispondente (\w+):, ma anche non trangugiarlo Si può fare.

1

Proprio di recente, ho avuto lo stesso problema.

per analizzare il contenuto di $ t, è possibile utilizzare questo RegEx:

/(\w+): (.+?(?=(?:, \w+:|$)))/mgi 

sarà coppie di valore-chiave tornare.

esempio JavaScript:

var currentPropertiesText = jsonEntry['content']['$t']; 

    // var propsArray = currentPropertiesText.split(", "); 
    var re = /(\w+): (.+?(?=(?:, \w+:|$)))/mgi; 
    var propsArray = re.exec(currentPropertiesText) 
    var props = {}; 

    while (propsArray != null) { 

     var propName = propsArray[1]; 
     var propValue = propsArray[2]; 

     props[propName] = propValue; 

     propsArray = re.exec(currentPropertiesText); 
    } 

che dovrebbe aiutare :-)

Problemi correlati