Shlomo
Shlomo

Reputation: 3990

Javascript object to formatted string

How to output an object as a readable string with formatting (structured like with <pre>) ?

No jQuery possible.

My object looks like this using console.log.

Object
   title: "Another sting"
   type: "tree"
   options: Object
      paging: "20"
      structuretype: "1"
   columns: Object
      ...
   description: "This is a string"
   ...

What is the best to convert it to a structured string?

My attempt:

I tried using stringify() to get the JSON structure. I could then write my own parser, but maybe there are already any implementations?

Upvotes: 8

Views: 16137

Answers (2)

Shlomo
Shlomo

Reputation: 3990

In the meantime I came up with this function, maybe someone can use it:

addIndent: function(nSpaces) {
         var strOutput = '';
         for(var i = 0; i < nSpaces; i++) {
            strOutput += '--';
         }
         return strOutput; 
      }

parseObjToStr: function(oObject, nLevel) {
         var that = this;
         var strOutput = '';
         nLevel = nLevel || 0;

         for(var oEl in oObject) {
            if(typeof oObject[oEl] === 'object' || Object.prototype.toString.call( oObject[oEl] ) === '[object Array]') 
            {
               strOutput += that.addIndent(nLevel) + oEl + "<br />";
               strOutput += that.parseObjToStr( oObject[oEl], nLevel+1);
            } 
            else 
            {
               strOutput += that.addIndent(nLevel) + oEl + " = " + oObject[oEl] + "<br />";
            }
         }
         return strOutput;
      }

Upvotes: 0

sync
sync

Reputation: 5640

JSON.stringify includes a formatting argument:

JSON.stringify(value[, replacer [, space]])

The space argument may be used to control spacing in the final string. If it is a number, successive levels in the stringification will each be indented by this many space characters (up to 10). If it is a string, successive levels will indented by this string (or the first ten characters of it).

Using a tab character mimics standard pretty-print appearance

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

Is that enough formatting for what you need? E.g. try:

 JSON.stringify( object, null, 2 );

Otherwise, http://code.google.com/p/google-code-prettify/ is a standalone JSON to HTML pretty printer. Used by stackoverflow and google code, I believe.

Upvotes: 18

Related Questions