2015-06-17 2 views
0

Есть ли способ зарегистрировать содержимое объекта с помощью Logger.log в сценариях приложений Google?Журнал Javascript объект как строка Скрипты приложений Google

Если у меня есть Logger.log(data), журнал «DataTableBuilder» или «объект» или что-то подобное и невероятно бесполезное.

Я хочу видеть JSON строки этих объектов, если это возможно ...

ответ

0

Эта функция я редактировался another SO answer:

var Log = { 

// Thanks to Amos Batto - https://stackoverflow.com/questions/603987/what-is-the-javascript-equivalent-of-var-dump-or-print-r-in-php 

    /* 
    dump() displays the contents of a variable like var_dump() does in PHP. dump() is 
    better than typeof, because it can distinguish between array, null and object. 
    Parameters: 
    v:    The variable 
    howDisplay:  "none", "body", "alert" (default) 
    recursionLevel: Number of times the function has recursed when entering nested 
        objects or arrays. Each level of recursion adds extra space to the 
        output to indicate level. Set to 0 by default. 
    Return Value: 
    A string of the variable's contents 
    Limitations: 
    Can't pass an undefined variable to dump(). 
    dump() can't distinguish between int and float. 
    dump() can't tell the original variable type of a member variable of an object. 
    These limitations can't be fixed because these are *features* of JS. However, dump() 
    */ 

    dump: function(functionName, v, recursionLevel) { 

     recursionLevel = (typeof recursionLevel !== 'number') ? 0 : recursionLevel; 

     var vType = typeof v; 
     var out = vType; 

     switch (vType) { 

      case "number": 
       /* there is absolutely no way in JS to distinguish 2 from 2.0 
       so 'number' is the best that you can do. The following doesn't work: 
       var er = /^[0-9]+$/; 
       if (!isNaN(v) && v % 1 === 0 && er.test(3.0)) 
        out = 'int';*/ 

      case "boolean": 
       out += ": " + v; 
       break; 

      case "string": 
       out += "(" + v.length + '): "' + v + '"'; 
       break; 

      case "object": 
       //check if null 
       if (v === null) { 
        out = "null"; 

       } 
       //If using jQuery: if ($.isArray(v)) 
       //If using IE: if (isArray(v)) 
       //this should work for all browsers according to the ECMAScript standard: 
       else if (Object.prototype.toString.call(v) === '[object Array]') { 
        out = 'array(' + v.length + '): {\n'; 
        for (var i = 0; i < v.length; i++) { 
         out += repeatString(' ', recursionLevel) + " [" + i + "]: " + 
          Log.dump(functionName, v[i], recursionLevel + 1) + "\n"; 
        } 
        out += repeatString(' ', recursionLevel) + "}"; 
       } 
       else { //if object  
        sContents = "{\n"; 
        cnt = 0; 
        for (var member in v) { 
         //No way to know the original data type of member, since JS 
         //always converts it to a string and no other way to parse objects. 
         sContents += repeatString(' ', recursionLevel) + " " + member + 
          ": " + Log.dump(functionName, v[member], recursionLevel + 1) + "\n"; 
         cnt++; 
        } 
        sContents += repeatString(' ', recursionLevel) + "}"; 
        out += "(" + cnt + "): " + sContents; 
       } 
       break; 
     } 

     Logger.log(functionName + ' - ' + out); 

    return; 

    // Private Functions 
    // ----------------- 

    /* repeatString() returns a string which has been repeated a set number of times */ 
    function repeatString(str, num) { 
     out = ''; 
     for (var i = 0; i < num; i++) { 
      out += str; 
     } 
     return out; 

    } // Log.dump.repeatString() 

    }, // Log.dump() 
} 
+0

Очень новый для google-скриптов, но похоже, что вам не хватает функции. Когда я запускаю это, я получаю: «TypeError: не удается найти функцию более тонкую в объекте [object Object]. (Строка 80)« –

+0

Это была моя личная функция регистрации, которую я забыл вынуть. Я заменил его на Logger.log –

Смежные вопросы