2012-05-18 50 views
7

Tengo un script simple que extrae unos 30,000 caracteres de JSON.script de google apps UrlFetchApp.fetch limitaciones?

me sale SyntaxError: Unexpected token: F (line 12) cuando trato de analizarlo con JSON.parse() o Utilities.jsonParse();

function refresh() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 
    sheet.clear(); 


    var text = UrlFetchApp.fetch("http://blablah/json"); 

    Logger.log(text.getContentText()); 

    //error SyntaxError: Unexpected token: F (line 12) 
    json = JSON.parse(text); 
) 

El registrador sólo muestra unos 59 líneas de la JSON, pero me dijeron que el registrador tiene un límite de espacio - pero yo' No estoy tan seguro de eso.

Al ejecutar en mi propio servidor, JSON.parse analiza los datos muy bien y también lo hace jQuery get().

Así que estoy pensando que UrlFetchApp.fetch() simplemente no puede obtener archivos largos?

difícil de aceptar y he encontrado ninguna documentación al respecto :(

+1

Agregue la línea "Logger.log (text.getContentText(). Length);" para determinar cuántos personajes fueron realmente recuperados. –

+1

¿Por qué no asumir que obtuvo todos los datos? He usado UrlFetch para capturar muchos datos y creo que 30K debería estar bien. Simplemente use Utilities.jsonParse() - ¿recibe un error? La recomendación de Eric también es genial. – mzimmerman

+1

@mzimmerman 'JSON.parse' se recomienda sobre' Utilities.jsonParse'. No recuerdo las diferencias ahora, pero una búsqueda en los foros de google debería encontrarla. –

Respuesta

4

Puede comprobar las limitaciones UrlFetch y otros servicios en el nuevo guión Aplicaciones dashboard. Desde mi experiencia, Logger.log tiene un mucho más apretado limitación para un solo registro que UrlFetch, es posible que UrlFetch lo esté haciendo bien, Logger.log no lo muestra y se encuentra con otro problema.

Intente colocar el resultado getContentText en otro lugar, por ejemplo, una celda de hoja de cálculo. O divídalo y llame al registro del registrador en for-loop.

Un posible error que podría estar enfrentando (además de la limitación de cuota) es la codificación de caracteres, getContentText tiene un parámetro opcional donde puede informar la codificación de la página, ¿lo ha verificado?

+2

Ok, estoy marcando esto como la respuesta, ya que me ayudó a encontrar la respuesta. Sí Logger.log (text.getContentText(). Length) spit puso 30k caracteres, y poniéndolo en una celda de fila tenía todo el asunto. El secreto estaba haciendo value = text.getContentText(); luego haciendo JSON.parse (valor) – Vigrond

+0

¡Claro! ¿Cómo nos perdimos eso? :) –

Cuestiones relacionadas