2012-04-03 26 views
6

EDYTOWANIE:entry.content.$t jest nieprawidłowym polem dostępu do poszczególnych komórek. entry.gsx $ [nagłówek kolumny komórki] jest prawidłową metodą. Przepraszam i dziękuję za pomoc w rozwiązaniu tego problemu.Analiza JSON z arkusza kalkulacyjnego Google

Oryginalne pytanie:

Próbuję analizować JSON data from a Google Spreadsheet. Problem polega na tym, że pole wpisów zwraca ciąg znaków, który jest całym wierszem arkusza kalkulacyjnego, ale pojawia się jako obiekt zniekształcony. W jaki sposób inne osoby analizują te dane? Oto co węzeł zawartość wygląda następująco:

"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" 
}, 

rozejrzysz, pole $t zwraca cały ciąg, który jest wiersz w arkuszu kalkulacyjnym Google. Więc entry.content.$t zwraca łańcuch: location: 780 Valencia St San Francisco, CA 94110, phonenumber: (555) 555-5555...

Dalsze zaostrza ten problem jest to, że niektóre komórki w arkuszu kalkulacyjnym mają przecinki (takich jak adresy), które nie są notowane lub uciekli. Coś jak

jQuery.parseJSON(entry.content.$t) 

lub

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

zgłasza błąd. Przypuszczam, że regex jest opcją, ale mam nadzieję, że inni mogli rozwiązać to w bardziej elegancki sposób. Dzięki za pomoc!

+1

Co jest wniosek użyć, aby uzyskać dane JSON? Czy używasz komórek typu lub listy typów? (patrz http://code.google.com/apis/gdata/samples/spreadsheet_sample.html) – HBP

+1

Patrząc na dalsze przykłady, myślę, że robisz coś złego - albo w jaki sposób żądasz JSON, czy w samych arkuszach kalkulacyjnych. Z tego co widzę, nie powinieneś otrzymywać całego wiersza jako pola tekstowego; powinieneś uzyskać kombinację obiektów i tablic w swoich danych, aby oznaczać wiersze i kolumny. –

+0

Doh! Rozgryzłem to. Masz to. Wyodrębniam zły węzeł. Najwyraźniej zwraca poszczególne obiekty dla każdej komórki. Mój błąd. Wielkie dzięki za złapanie tego. – jrue

Odpowiedz

1

"Tekst" w atrybucie $t nie jest JSON. Zgodnie z dokumentacją, węzły tekstowe są przenoszone do atrybutów $t, więc nie można polegać na niczym w poprawnie sformatowanym JSON.

Proponuję zamiast tego użyć wyrażenia regularnego, chociaż ostrzeżę cię, że parsowanie tego wyniku będzie wymagało pewnych wymyślnych rzeczy. Skorzystasz z asercji, ponieważ nie możesz dzielić przecinków - musisz wyszukać (\w+):, ale aby znaleźć następny element, musisz wziąć wszystko do innego pasującego (\w+):, ale także nie żartuj. To może być zrobione.

1

Niedawno miałem ten sam problem.

do analizowania zawartości $ t, można użyć tego wyrażenia regularnego:

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

powróci par klucz-wartość.

JavaScript przykład:

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); 
    } 

To powinno pomóc :-)

Powiązane problemy